Синтаксис emacs replace-regexp - PullRequest
       2

Синтаксис emacs replace-regexp

5 голосов
/ 05 апреля 2011

Я пытаюсь найти каждую дату и поставить вокруг нее цитаты. Я думал, что это должно быть:

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

Я также попробовал [0-9] вместо \d.

это не работает. Но с помощью isearch-forward-regexp я могу набрать [0-9][0-9] и посмотреть, как подсвечиваются цели. Что я делаю не так с заменой?

Ответы [ 4 ]

9 голосов
/ 05 апреля 2011

В регулярных выражениях Emacs нет общей \d сокращенной формы для [0-9].

Я просто поместил текст 2011-04-01 в новый буфер, вернулся к началу буфера и набрал Mx replace-regexp RET 201[0-9]-[0-9][0-9]-[0-9][0-9] RET '\&' RET , и дата была заключена в одинарные кавычки, как и ожидалось.

5 голосов
/ 05 апреля 2011

\d не поддерживается в синтаксисе регулярных выражений Emacs (C-h S regexp имеет документацию по ним). Вы можете использовать [0-9], как вы, или использовать стиль POSIX [[:digit:]].

Однако то, что вы сделали (с [0-9]), должно было сработать, и на самом деле сработало только для меня. Если вы используете регулярное выражение в программе, вы также можете найти M-x regexp-builder полезным.

0 голосов
/ 11 ноября 2014

Регулярные выражения слишком включены.Следующее также будет соответствовать недопустимым датам, таким как «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 \) "

0 голосов
/ 05 апреля 2011

Вам может потребоваться экранировать -s:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...