elisp 正则表达式模式中的双转义字符

Double escape characters in elisp regex patterns

(regexp-opt '("this" "that"))

returns,

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

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

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

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

中所述

'Likewise, you can include a backslash by preceding it with another backslash, like this: "this \ is a single embedded backslash".'

至于 ?: 构造,它是您指定非捕获或 "shy" 组的方式:

"A shy group serves the first two purposes of an ordinary group (controlling the nesting of other operators), but it does not get a number, so you cannot refer back to its value with ‘\digit’. Shy groups are particularly useful for mechanically-constructed regular expressions, because they can be added automatically without altering the numbering of ordinary, non-shy groups."

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