emacs regexp和perl兼容正则表达式(PCRE)的比较表?

时间:2009-12-22 13:24:15

标签: regex emacs

网上是否有一个很好的表格或备忘单来比较emacs正则表达式和PCRE的sytax?

当我使用emacs正则表达式时,我必须记住要逃避分组括号和括号以及其他差异,这一切都让人感到困惑,语法比较表可以最大限度地减少混淆。

3 个答案:

答案 0 :(得分:23)

我将收集我在这里知道的语法差异。这个答案是社区维基,如果有人愿意,可以添加更多。在添加更多内容之前,请务必先检查预览。

何时逃避(){} |

在Emacs regexp中,(,),{,},|是文字和转义的(\(,\),\ {,\},\ |)是元。

在Perl兼容的regexp中,(,),{,},|是meta,而转义的是字面的。

*和+

\ *是Emacs和Perl中的字面明星。如果表达式以星号开头,则起始星在Emacs regexp中是文字的,在Perl regexp中是非法的。

同样的加号。

字符类

字符类\d(对于数字),\w(对于单词),\s(对于空白字符)在Emacs正则表达式中不起作用,但在Perl中工作。在Emacs中,使用[[:digit:]][[:word:]][[:space:]]代替(使用双括号)。在Perl中,它们也是[:digit:][:word:][:space:](单括号)。

与Perl不同,Emacs中的

\w也匹配'"。这是因为文本模式语法表将'"作为单词字符。

反斜杠构造

Emacs Regexp Backslash中提到的反斜杠结构中,以下结构不在Perl兼容的正则表达式中。

\` \' \= \< \> \_< \_> \sC \cC

另见what \< and > can do that \b cannot do

\A\Z\z不在Emacs中。在Emacs中,请改为使用:

\` or \'

有关换行和交互式使用的并发症

请参阅Text Pattern Matching in Emacs中的第二部分。它还提到为什么\n\t与正则表达式(C-M-sM-x isearch-forward-regexp)的增量搜索中的换行符和制表符不匹配,以及该怎么做。

Emacswiki regular expression

答案 1 :(得分:4)

我认为你正在寻找http://www.regular-expressions.info/refflavors.html

Emacs的正则​​表达式是那些表格中的“GNU ERE”。

答案 2 :(得分:0)

区别仅在于(){}|字符不是吗?