Emacs Lisp正则表达式匹配所有内容直到字符序列

时间:2013-12-21 00:41:50

标签: regex emacs elisp

我正在尝试在emacs lisp中编写一个匹配多行注释的正则表达式。

例如:

{-
  Some

  Comment

  Here
-}

应该作为评论匹配。基本上,{ - 和 - }之间的任何东西。我几乎可以通过以下方式来做到这一点:

"\{\-[^-]*\-\}"

但是,如果评论中包含-并未紧跟}

,则会失败

因此,在这种情况下它将无法正确匹配:

{-
  Some -
  Comment -
  Here -
-}

哪个应该有效。

基本上,我希望在序列-}

之前匹配所有内容(包括换行符)

提前致谢!

2 个答案:

答案 0 :(得分:1)

为此类案例制作了一个工具包。它附带一个解析器,beg-end.el。

仍然要编写一个函数,它将确定开始的resp。对象的结尾。

在伪代码中:

(put 'MY-FORM 'beginning-op-at
           (lambda () (search-forward "-}")))

(put 'MY-FORM 'end-op-at
     (lambda () (search-backward "{-")))

完成后,它应该可用,即像这样复制和返回

(defun MY-FORM-atpt (&optional arg)
  " "
  (interactive "p")
  (ar-th 'MY-FORM arg))

在此处获取:

https://launchpad.net/s-x-emacs-werkstatt/

答案 1 :(得分:1)

这不适合你吗? {-[^-]*[^}]*-}

(你没有准确地指明事情,所以我只是猜测你想要什么。{--}必须在行开头吗?它们必须自己排队吗?必须它们之间还有其他一些字符吗?等等。例如,它应该匹配这样的一行吗?{--}?)