2011-04-05 99 views
5

我试图找到每个日期并在其周围加上引号。我想这应该是:emacs replace-regexp的语法

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

我也试过[0-9]而不是\d

它不起作用。但使用isearch-forward-regexp我可以键入[0-9][0-9]并观看目标突出显示。我在做什么错在替换?

回答

9

Emacs正则表达式不具有\d的简写[0-9]

我只是把文字2011-04-01到一个新的缓冲区,又回到了缓冲区的开始,和类型的Mxreplace-regexpRET201[0-9]-[0-9][0-9]-[0-9][0-9]RET'\&'RET,以及日期为如预期般被单引号包围。

5

\d在Emacs正则表达式语法中不受支持(C-h S regexp有关于它们的文档)。您可以像您那样使用[0-9],或使用POSIX风格[[:digit:]]

但是,你所做的(与[0-9])应该工作,事实上只是为我工作。如果您在程序中使用正则表达式,则可能还会发现M-x regexp-builder有用。

+0

不知道我做错了什么,也许我下意识地在做M-%,今天我发现自己做了几次。 – Dov 2011-04-07 14:38:35

0

您可能需要逃避-s:

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

0

给出的正则表达式过于包容性。以下也将匹配无效日期,如“2014-01-33”,但不是很多(假设YYYY-MM-DD排序):

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

或避免日期如”2014-11-33“(但不是像”2014-02-31“或“2014-00-00”),您可能会受到一些限制:

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