请问是否有一个好的网页上的表格或备忘单,可以比较Emacs正则表达式和PCRE的语法?
在使用Emacs正则表达式时,我需要记住要转义分组括号、大括号和其他差异,这一切都很令人困惑。一个语法对比表格将有助于减少混淆。
在使用Emacs正则表达式时,我需要记住要转义分组括号、大括号和其他差异,这一切都很令人困惑。一个语法对比表格将有助于减少混淆。
我将在此处收集我知道的语法差异。这个答案是社区维护的,如果有人愿意添加更多,请始终在添加之前检查预览。
在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
\A
, \Z
, \z
在Emacs中不可用。在Emacs中,请使用以下内容代替:
\` or \'
请参见Emacs中的文本模式匹配中的第二部分。它还提到了为什么在正则表达式增量搜索(C-M-s
或M-x isearch-forward-regexp
)中,\n
和\t
不能匹配换行符和制表符,以及应该如何解决。
区别只在于 (){}|
这些字符,不是吗?