2011-04-05 11 views
5

Estoy tratando de encontrar cada fecha y poner comillas a su alrededor. Pensé que esto debería ser:Sintaxis de emacs replace-regexp

M-x replace-regexp 201\d-\d\d-\d\d <ret> '\&'

También probé [0-9] en lugar de \d.

no funciona. Pero usando isearch-forward-regexp puedo escribir [0-9][0-9] y observar los objetivos resaltados. ¿Qué estoy haciendo mal con el reemplazo?

Respuesta

9

Emacs regexps no tienen la abreviatura común \d para [0-9].

acabo de poner el texto 2011-04-01 en un nuevo buffer, se fue de nuevo al comienzo de la memoria intermedia, y mecanografiadas Mxreplace-regexpRET201[0-9]-[0-9][0-9]-[0-9][0-9]RET RET'\&', y la fecha era rodeado de comillas simples, como se esperaba.

5

\d no es compatible con la sintaxis de expresiones regulares de Emacs (C-h S regexp tiene documentación sobre ellos). Puede usar [0-9] como lo hizo o utilizar el estilo POSIX [[:digit:]].

Sin embargo, lo que hiciste (con [0-9]) debería haber funcionado, y en realidad solo funcionó para mí. Si está utilizando una expresión regular en un programa, también puede encontrar M-x regexp-builder útil.

+0

no sé lo que hice mal, tal vez inconscientemente estaba haciendo M-%, me pillé haciendo eso unas cuantas veces hoy. – Dov

0

Es posible que necesita para escapar de la -s:

M-x replace-regexp <RET> 201[0-9]\-[0-9][0-9]\-[0-9][0-9] <RET> '\&'

0

Las expresiones regulares son dados muy abierto. Lo siguiente también coincidirá con fechas no válidas, como "2014-01-33", pero no tantas (se supone el pedido YYYY-MM-DD):

"^ 20 [0-9] [0-9] - [ 0-1] [0-2] - [0-3] [0-9] "

o, para evitar fechas como" 2014-11-33 "(pero no como" 2014-02-31 "o "2014-00-00"), podría ser un poco más restrictivo:

"^ 20 [0-9] [0-9] - [0-1] [0-2] - \ ([0- 2] [0-9] \ | 30 \ | 31 \) "

Cuestiones relacionadas