我想在 Emacs 中创建一个匹配 3 位数字的正则表达式。例如,我想匹配以下内容:
123
345
789
但不是
1234
12
12 23
如果我使用[0-9]+
我匹配任何单个数字字符串。我认为[0-9]{3}
会起作用,但是在重新构建器中进行测试时,它不匹配任何东西。
如果您以交互方式输入正则表达式,并且想要使用{3}
,则需要使用反斜杠来转义花括号。如果您不想匹配较长数字字符串的任何部分,请使用\b
匹配数字周围的单词边界。这留下:
\b[0-9]\{3\}\b
对于那些想要更多信息的人\b
,请参阅文档:
匹配空字符串,但仅在单词的开头或结尾。因此,
\bfoo\b
将任何出现的 匹配foo
为单独的单词。\bballs?\b
匹配ball
或balls
作为单独的词。\b
匹配缓冲区的开头或结尾,而不管它旁边出现什么文本。
如果您确实想在 elisp 代码中使用此正则表达式,一如既往,您必须再次转义反斜杠。例如:
(highlight-regexp "\\b[0-9]\\{3\\}\\b")
[0-9][0-9][0-9]
,[0-9]{3}
或者\d{3}
不工作,因为它们也匹配“1234”。
所以这取决于分隔符是什么。
如果它在变量中,那么您可以执行^/[0-9]{3}/$
. 如果它由空格分隔,你可以这样做\w+[0-9]{3}\w+
你应该使用这个:
"^\d{3}$"
正如其他人指出的那样,您需要匹配的不仅仅是三个数字。在数字之前,您必须有一个 line-start 或不是数字的东西。如果 emacs 支持 \D,请使用它。否则使用集合 [^0-9]。
简而言之:
(^|\D)\d{3}(\D|$)
在 Emacs 中试验正则表达式时,我发现regex-tool非常有用:
ftp://ftp.newartisans.com/pub/emacs/regex-tool.el
不是答案(问题已经回答),只是一般提示。
[0-9][0-9][0-9] 将匹配至少3 个数字,因此正如 Joe 所提到的,您必须(至少)包括 \b 或任何其他可以分隔数字的内容。可能最可靠的方法是:
[^0-9][0-9][0-9][0-9][^0-9]
这很简单:
[0-9][0-9][0-9]