Как создать регулярное выражение в Emacs для ровно 3 цифр?

Я хочу создать regexp в Emacs, который соответствует ровно 3 цифрам. Например, я хочу сопоставить следующее:

123
345
789

Но не

1234
12
12 23

Если я использую [0-9]+, я сопоставляю любую строку цифр. Я думал, что [0-9]{3} будет работать, но при тестировании в re-builder он ничего не соответствует.

Ответы

Ответ 1

Если вы входите в регулярное выражение в интерактивном режиме и хотите использовать {3}, вам нужно использовать обратную косую черту, чтобы избежать фигурных скобок. Если вы не хотите соответствовать какой-либо части более длинных строк чисел, используйте \b для соответствия границам слов по номерам. Это оставляет:

\b[0-9]\{3\}\b

Для тех, кто хочет получить дополнительную информацию о \b, см. документы:

соответствует пустой строке, но только в начале или конце слова. Таким образом, \bfoo\bсоответствует любому вхождению foo как отдельному слову. \bballs?\b соответствует ball или balls как отдельное слово. \b соответствует в начале или в конце буфера независимо от того, какой текст появляется рядом с ним.

Если вы хотите использовать это регулярное выражение из кода elisp, как всегда, вы должны снова избегать обратных косых черт. Например:

(highlight-regexp "\\b[0-9]\\{3\\}\\b")

Ответ 2

[0-9][0-9][0-9], [0-9]{3} или \d{3} не работают, потому что они также соответствуют "1234".

Так что это зависит от того, что представляет собой разделитель.

Если это переменная, вы можете сделать ^/[0-9]{3}/$. Если он ограничен пробелами, вы можете сделать \w+[0-9]{3}\w+

Ответ 3

Как отмечают другие, вам нужно сопоставить не только три цифры. Перед цифрами вы должны иметь либо начало строки, либо нечто, что не является цифрой. Если emacs поддерживает \D, используйте его. В противном случае используйте набор [^ 0-9].

В двух словах:

(^|\D)\d{3}(\D|$)

Ответ 4

Вы должны использовать это:

"^\d{3}$"

Ответ 5

При экспериментировании с регулярными выражениями в Emacs я могу найти regex-tool:

ftp://ftp.newartisans.com/pub/emacs/regex-tool.el

Не ответ (на этот вопрос уже дан ответ), просто общий совет.

Ответ 6

[0-9] [0-9] [0-9] будет соответствовать минимум 3 числам, так как, как сказал Джо, вам нужно (как минимум) включить \b или что-нибудь еще, что будет ограничивать числа, Вероятно, самый надежный способ:

[^ 0-9] [0-9] [0-9] [0-9] [^ 0-9]

Ответ 7

Это довольно просто:

[0-9][0-9][0-9]