【问题标题】:comparison table for emacs regexp and perl compatible regular expression (PCRE)?emacs regexp 和 perl 兼容正则表达式 (PCRE) 的比较表?
【发布时间】:2009-12-22 13:24:15
【问题描述】:

网络上是否有一个很好的表格或备忘单来比较 emacs regex 和 PCRE 的语法?

当我使用 emacs 正则表达式时,我必须记住避免分组括号和大括号以及其他差异,这一切都令人困惑,语法比较表将有助于减少混淆。

【问题讨论】:

    标签: regex emacs


    【解决方案1】:

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

    何时转义 ( ) { } |

    在 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)的增量搜索中不匹配换行符和制表符以及该怎么做。

    等

    Emacswiki regular expression

    【讨论】:

      【解决方案2】:

      我想你在找http://www.regular-expressions.info/refflavors.html

      Emacs 的正则表达式在这些表中是“GNU ERE”。

      【讨论】:

      • 链接好像失效了。
      【解决方案3】:

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

      【讨论】:

      • 你能再具体一点吗?我的意思是,是否允许前瞻?显然,逃避差异已经存在,最好描述一下。
      • 啊,你说得对,功能上的区别,你确实需要对比图,我现在没有,我只是提到语法不同。
      • 他们在明星角色上也有所不同。
      猜你喜欢
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多