Emacs正则表达式和Perl兼容正则表达式(PCRE)的比较表格是什么?

22
请问是否有一个好的网页上的表格或备忘单,可以比较Emacs正则表达式和PCRE的语法?
在使用Emacs正则表达式时,我需要记住要转义分组括号、大括号和其他差异,这一切都很令人困惑。一个语法对比表格将有助于减少混淆。
3个回答

27

我将在此处收集我知道的语法差异。这个答案是社区维护的,如果有人愿意添加更多,请始终在添加之前检查预览。

何时使用( ) { } |转义

在Emacs正则表达式中,(, ), {, }, | 是文字,而转义的(\(, \), \{, \}, \|)则是元字符。

在Perl兼容的正则表达式中,(, ), {, }, | 是元字符,而转义的则是文字。

*和+

\*在Emacs和Perl中均表示字面含义。如果表达式以星号开头,则在Emacs正则表达式中起始星号为字面含义,在Perl正则表达式中则为非法。

加号同样如此。

字符类

字符类\d(表示数字)、\w(表示单词)和\s(表示空格字符)在Emacs正则表达式中无效,但在Perl中有效。在Emacs中,应使用[[:digit:]][[:word:]][[:space:]](使用双括号)。在Perl中,它们也是[:digit:][:word:][:space:](单括号)。

在Emacs中,\w也匹配'",而Perl则不同。这是因为文本模式语法表将'"视为单词字符。

反斜杠构造

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

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

另请参见what <和>能做而\b不能做的事情

\A, \Z, \z在Emacs中不可用。在Emacs中,请使用以下内容代替:

\` or \'

换行符和交互式使用的复杂性

请参见Emacs中的文本模式匹配中的第二部分。它还提到了为什么在正则表达式增量搜索(C-M-sM-x isearch-forward-regexp)中,\n\t不能匹配换行符和制表符,以及应该如何解决。

等等

Emacswiki正则表达式


4

链接似乎已经失效。 - xji

0

区别只在于 (){}| 这些字符,不是吗?


2
能否具体说一下?我的意思是,是否允许向前查看?显然有转义差异存在,最好描述清楚。 - PP.
啊,你说得对,要想了解功能上的区别,确实需要比较表格。我现在没有任何东西,只是提到了语法上的不同。 - YOU
它们在星号字符上也不同。 - Yoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接