题
我想创建一个regexp在Emacs,完全匹配的3位数字。例如,我想到匹配如下:
123
345
789
但不是
1234
12
12 23
如果我用 [0-9]+
我匹配的任何单串的数字。我以为 [0-9]{3}
会的工作,但测试时重新生成器这不符合任何东西。
解决方案
如果你进入regex以交互方式,并且想要使用 {3}
, 你需要使用反斜杠,逃离的大括号内。如果你不想比赛的任何部长串的数字,使用 \b
相匹配的词边界周围的数字。这叶:
\b[0-9]\{3\}\b
对于那些想要更多的信息 \b
, 见 文档:
相匹配的空串,但只有在开头或结尾的一句话。因此,
\bfoo\b
匹配的任何发生的foo
作为一个单独的单词。\bballs?\b
比赛ball
或balls
作为一个单独的单词。\b
比赛开始或结束时的缓冲器无论什么文本中出现。
如果你想要使用这regex从工作基本是在封闭的情况下进行编码,如往常一样,你必须逃离反斜杠更多的时间。例如:
(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}$"
正如其他人指出,需要相匹配的不仅仅是三个数字。之前数字的你必须要有一线开始或东西,不是一个数字。如果emacs支持\D,使用它。否则使用的设定[^0-9].
一言以蔽之:
(^|\D)\d{3}(\D|$)
试验时经常表现在Emacs的,我找到 regex工具 相当有用的:
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]