【问题标题】:Double escape characters in elisp regex patternselisp 正则表达式模式中的双转义字符
【发布时间】:2015-01-17 23:26:09
【问题描述】:
(regexp-opt '("this" "that"))

返回,

"\\(?:th\\(?:at\\|is\\)\\)

为什么在这个 elisp 正则表达式中到处都有双反斜杠。 elisp 正则表达式不使用单个反斜杠吗?

还有,?符号是正则表达式模式中的后缀运算符,这意味着它作用于它前面的字符..(http://www.gnu.org/software/emacs/manual/html_node/elisp/Regexp-Special.html#Regexp-Special)。但是在这里, ? 之前没有表达式操作员。那么,什么是 (?:th\\ 此正则表达式中的部分意思。

【问题讨论】:

    标签: elisp emacs24


    【解决方案1】:

    反斜杠是正则表达式语法的一部分。但是要将其保留为正则表达式字符串的一部分,您需要使用另一个反斜杠来保护它,如syntax for strings documentation 中所述:

    '同样,您可以通过在反斜杠前面加上另一个反斜杠来包含反斜杠,例如:“this \\ is a single embedded backslash”。'

    至于?: 构造,它是您指定非捕获或“害羞”组的方式:

    “一个 shy 组服务于普通组的前两个目的(控制其他运算符的嵌套),但它没有得到数字,所以你不能用 '\digit' 引用它的值。害羞组对于机械构造的正则表达式特别有用,因为它们可以自动添加而无需更改普通非害羞组的编号。”

    它被记录为regexp backslash documentation 的一部分。正如上面引用的段落所解释的,它在 regexp-opt 之类的函数中很有用,用于在不创建捕获组的情况下对模式进行分组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多