【问题标题】:Bracket in regexp and as string (elisp)正则表达式中的括号和字符串(elisp)
【发布时间】:2013-02-07 21:59:01
【问题描述】:

我正在创建一个括号/括号完成函数,很像自动配对之类的包。

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

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

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

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

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

【问题讨论】:

    标签: regex string emacs elisp


    【解决方案1】:

    您可以使用(looking-back (regexp-quote (caar my-alist)))

    regexp-quote 是 C 源代码中的内置函数。

    (regexp-quote STRING)
    

    返回一个与 STRING 完全匹配的正则表达式字符串。

    【讨论】:

    • 这回答了我的问题,谢谢。尽可能接受作为答案。
    【解决方案2】:

    没有直接回答你的问题...

    您可能应该考虑查看paren library 是如何实现的,特别是它是使用syntax table 的开/关括号类实现的。

    通过这样做,您将能够利用 navigate s-expressions 的所有内置函数 - 并正确处理嵌套匹配对。

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

    【讨论】:

    • 是的,确实,一旦我完成了这个基本功能,那种“数着看,如果我们应该关闭”真的是我所追求的。感谢您的建议。
    • @Dualinity 重点是,如果你使用语法表和支持函数,那么你不需要做任何“counting-to-see-if-we-should-close” ...
    猜你喜欢
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多