我想创建一个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 比赛 ballballs 作为一个单独的单词。 \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]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top