正则表达式中的括号和字符串(elisp)

时间:2013-02-07 21:59:02

标签: regex string emacs elisp

我正在创建一个括号/括号完成函数,就像自动配对这样的包。

我将这些组合存储在alist中,如:("[" . "]")

当我尝试在(car (car my-alist))中使用(looking-back REGEXP)作为正则表达式时, 这不起作用,因为它将其视为"[",而不是字符串,它是一个不完整的正则表达式:

looking-back: Invalid regexp: "Unmatched [ or [^"

如何使用它,以便仍然可以将其作为字符串从(car (car my-alist))(所谓“[”)插入,同时也可以使用“[”作为正则表达式?

请注意,这适用于"(",因为这不是特殊的正则表达式字符。

2 个答案:

答案 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的所有内置函数,并正确处理嵌套匹配对。

利用这种内置功能可以使您的代码更加简单,并且能够独立于模式工作(即不仅限于[])。