【发布时间】:2009-12-22 13:24:15
【问题描述】:
网络上是否有一个很好的表格或备忘单来比较 emacs regex 和 PCRE 的语法?
当我使用 emacs 正则表达式时,我必须记住避免分组括号和大括号以及其他差异,这一切都令人困惑,语法比较表将有助于减少混淆。
【问题讨论】:
网络上是否有一个很好的表格或备忘单来比较 emacs regex 和 PCRE 的语法?
当我使用 emacs 正则表达式时,我必须记住避免分组括号和大括号以及其他差异,这一切都令人困惑,语法比较表将有助于减少混淆。
【问题讨论】:
我将在这里收集我知道的语法差异。这个答案是社区维基,如果有人愿意,可以添加更多。在添加更多内容之前,请务必检查预览。
在 Emacs 正则表达式中,(, ), {, }, |是文字和转义的 (\(, \), \{, \}, \|) 是元。
在 Perl 兼容的正则表达式中,(, ), {, }, |是元,而转义的是字面量。
\* 是 Emacs 和 Perl 中的文字星号。如果表达式以星号开头,则起始星号在 Emacs 正则表达式中是文字,在 Perl 正则表达式中是非法的。
加号也是如此。
字符类\d(用于数字)、\w(用于单词)、\s(用于空白字符)在 Emacs 正则表达式中不起作用,但在 Perl 中起作用。在 Emacs 中,请改用 [[:digit:]]、[[:word:]]、[[:space:]](带双括号)。在 Perl 中,它们也是 [:digit:]、[:word:]、[:space:](单括号)。
Emacs 中的\w 也匹配' 和",这与Perl 不同。这是因为文本模式语法表有' 和" 作为单词字符。
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-s 或M-x isearch-forward-regexp)的增量搜索中不匹配换行符和制表符以及该怎么做。
【讨论】:
我想你在找http://www.regular-expressions.info/refflavors.html
Emacs 的正则表达式在这些表中是“GNU ERE”。
【讨论】:
区别仅在于(){}| 字符不是吗?
【讨论】: