emacs中匹配任意字符串的字符串匹配

kdb*_*kdb 2 regex emacs elisp escaping string-matching

在emacs lisp我只知道函数string-match[-p],但我不知道将文字字符串与字符串匹配的方法.

例如,假设我有一个由某个函数生成的字符串,并想知道另一个字符串是否包含它.在许多情况下,string-match-p将正常工作,但是当生成的字符串中包含正则表达式的语法,它会导致异常行为,甚至崩溃,如果包含正则表达式的语法是无效的(例如,不平衡报价括号\(,\)).

  1. 是emacs lisp中的某些函数,它是否与string-match-p正则表达式语法相似但不解释?
  2. 由于在CI中实现了正则表达式匹配,因此假设匹配正确的正则表达式比某些substring/ string=循环更快; 是否有一些方法可以将任意字符串转换为匹配该字符串且只匹配该字符串的正则表达式?

Tre*_*son 7

你在找regexp-quote

文档说:

(regexp-quote STRING)

Return a regexp string which matches exactly STRING and nothing else.
Run Code Online (Sandbox Code Playgroud)

我不知道你在#2中的假设是正确的,string=应该更快......

  • 谢谢,这在大多数情况下都有帮助.此外,对于使用`regexp-quote`在字符串包含实现中搜索的68个字符的查询字符串和≈300char字符串,在编译代码中快40倍,在未编译代码中快60倍.对于"string-starts-with","string-ends-with"但是,一个朴素的`(string =(substring ...)...)`实现在编译代码中快4倍(在未编译代码中慢4倍) )用于类似的输入大小. (2认同)