代码之家  ›  专栏  ›  技术社区  ›  Kevin Tighe

Emacs——Lisp中的正则表达式需要双转义——为什么?

  •  27
  • Kevin Tighe  · 技术社区  · 16 年前

    我一直在使用emacs lisp,我想写一个小函数来进行正则表达式搜索和替换。我花了很长时间才让正则表达式正常工作,因为我没有意识到在编写lisp代码时需要对所有特殊字符进行双转义(但在交互式使用查询替换正则表达式时则不需要!)。

    因此,例如,使用查询以交互方式替换正则表达式,您可以使用

    ^\(.*\)[\t]-.*$
    

    但是在编写elisp代码时,你需要像这样对所有内容进行双重转义:

    ^\\(.*\\)[\t]-.*$  
    

    我终于在Steve Yegge的一篇文章中找到了这个参考 article ,但我想知道是否有人知道这是为什么?

    4 回复  |  直到 14 年前
        1
  •  24
  •   legoscia    6 年前

    \( 在字符串中,它只是 (

        2
  •  19
  •   Trey Jackson    16 年前

    M-x re-builder
    
        3
  •  10
  •   Community CDub    8 年前

    当你在Stack Overflow上写这个问题时,你必须使用 8 slashes

        4
  •  8
  •   Regular Jo    8 年前

    emacs-lisp-mode 将为特殊表达(如 \\( \\) 为你。然后,您可以将面孔更改为 突出的东西。

    (他们是 font-lock-regexp-grouping-construct font-lock-regexp-grouping-backslash )