这些函数用于操作正则表达式。
该函数返回一个正则表达式,其唯一精确匹配的内容是 string。
在 looking-at 中使用该正则表达式,仅当缓冲区中的下一个字符是 string 时才会匹配成功;
在搜索函数中使用时,只要被搜索的文本包含 string 就会匹配成功。See 正则表达式搜索。
这允许你在调用需要正则表达式的函数时,执行精确的字符串匹配或搜索。
(regexp-quote "^The cat$")
⇒ "\\^The cat\\$"
regexp-quote 的一个用途是将精确字符串匹配与正则表达式描述的上下文结合。
例如,以下代码搜索由空白符包围的、值为 string 的字符串:
(re-search-forward (concat "\\s-" (regexp-quote string) "\\s-"))
如果返回的字符串不包含任何特殊字符,它可能就是 string 本身。
该函数返回一个高效的正则表达式,能够匹配列表 strings 中的任意一个字符串。 当你需要让匹配或搜索尽可能快时(例如用于字体锁定模式28),这个函数非常有用。
如果 strings 是空列表,返回值是一个永远不会匹配任何内容的正则表达式。
可选参数 paren 可以是以下任意值:
item 字符串 生成的正则表达式前会添加 paren,后会添加 ‘\)’。 例如,使用 ‘"\\(?1:"’ 可以生成一个显式编号的组。
words生成的正则表达式会被 ‘\<\(’ 和 ‘\)\>’ 包围。
symbols生成的正则表达式会被 ‘\_<\(’ 和 ‘\)\_>’ 包围 (这通常适用于匹配编程语言关键字等场景)。
nil生成的正则表达式会被 ‘\(’ 和 ‘\)’ 包围。
nil如果需要确保附加到其后的后缀运算符作用于整个表达式, 生成的正则表达式会被 ‘\(?:’ 和 ‘\)’ 包围。
返回的正则表达式经过排序,始终会匹配最长的可能字符串。
除了顺序之外,regexp-opt 生成的正则表达式与简化版本等价,但通常更高效:
(defun simplified-regexp-opt (strings &optional paren)
(let ((parens
(cond
((stringp paren) (cons paren "\\)"))
((eq paren 'words) '("\\<\\(" . "\\)\\>"))
((eq paren 'symbols) '("\\_<\\(" . "\\)\\_>"))
((null paren) '("\\(?:" . "\\)"))
(t '("\\(" . "\\)")))))
(concat (car parens)
(mapconcat 'regexp-quote strings "\\|")
(cdr parens))))
该函数返回 regexp 中分组构造(带括号的表达式)的总数。 不包含非捕获组(see 正则表达式中的反斜杠结构)。
该函数返回一个正则表达式,匹配字符列表 chars 中的任意一个字符。
(regexp-opt-charset '(?a ?b ?c ?d ?e))
⇒ "[a-e]"
该变量包含一个保证不会匹配任何字符串的正则表达式。 它特别适合用作可能被设置为实际匹配模式的变量的默认值。