我正在创建一个括号/括号完成函数,就像自动配对这样的包。
我将这些组合存储在alist
中,如:("[" . "]")
。
当我尝试在(car (car my-alist))
中使用(looking-back REGEXP)
作为正则表达式时,
这不起作用,因为它将其视为"["
,而不是字符串,它是一个不完整的正则表达式:
looking-back: Invalid regexp: "Unmatched [ or [^"
如何使用它,以便仍然可以将其作为字符串从(car (car my-alist))
(所谓“[”)插入,同时也可以使用“[”作为正则表达式?
请注意,这适用于"("
,因为这不是特殊的正则表达式字符。
答案 0 :(得分:1)
您可以使用(looking-back (regexp-quote (caar my-alist)))
。
regexp-quote
是C源代码中的内置函数。
(regexp-quote STRING)
返回一个与STRING完全匹配的正则表达式字符串。
答案 1 :(得分:1)
不直接回答你的问题......
您应该考虑查看paren
library的实现方式,特别是使用syntax table的打开/关闭括号类来实现。
通过这样做,您将能够利用navigate s-expressions的所有内置函数,并正确处理嵌套匹配对。
利用这种内置功能可以使您的代码更加简单,并且能够独立于模式工作(即不仅限于[
和]
)。