在Emacs的正则表达式中,为什么^[^[:digit:]]
匹配数字前面的数字和新行字符,例如它将与
1
1
但不是第一行。
我原来的想法是使用^[^[:digit:]]
来匹配不以数字开头的行。为什么这不符合我的目的?什么正则表达式可以用于我的目的?
感谢。
答案 0 :(得分:1)
根据 documentation ,您似乎无法在字符类中使用[:digit:]
:
括号表达式用于匹配字符范围。范围向后的括号表达式,例如'[z-a]',将被忽略。在方括号内,'\'字面意思。不支持字符类,例如,您需要使用'[0-9]'而不是'[[:digit:]]'。
这解释了为什么你不能使用你的正则表达式,因为你试图否定一个字符类中的[:digit:]
。
我不知道为什么这不起作用,但你可以通过这样做来实现同样的目标:
^[^0-9]
答案 1 :(得分:1)
使用反向符号[^some-character]
也可以匹配换行符。在示例中,第二行的“\ n”匹配,没有别的。
在缓冲区的开头调用它:
(progn (re-search-forward "^[^[:digit:]]" nil t 1)
(message "%s" (match-string-no-properties 0)))
答案 2 :(得分:1)
你的正则表达式根本不匹配数字,它只匹配换行符。它匹配它的原因是因为换行符不是数字。
您可以通过在数字之间的空行上评估以下内容来验证这一点。它会将点模式化为匹配结束,即之前数字:
(when (looking-at "^[^[:digit:]]") (goto-char (match-end 0)))
那么你想做什么呢?在某种程度上,你的正则表达式适合你,因为它匹配空行,并且它们不以数字开头。但是,如果要排除空行,可以使用以下"^[^[:digit:]\n]"
。这也将排除以换行符开头的行,即空行。