几个正则表达式的第一个匹配

时间:2014-10-08 19:34:47

标签: elisp

我有兴趣找到两个(或更多)正则表达式的下一个最接近的匹配。 (如果多个匹配,则最近的匹配。)正则表达式太复杂,无法使用" |"进行组合。我目前的方法是编写一个循环来查看" match-beginning",但是有一种更简单,更标准的方法来处理这种情况吗?

这是一个例子。我想要匹配:

"^sub\\s-+\\(\\(MEAT_EATING_\\)?ANIMAL[_A-Za-z0-9]*\\)\\b"

或:

"^\s*animal\s+\"\\([^\"]+\\)\""

以先到者为准。即使有办法将这些组合成一个仍然有效的正则表达式,我也不确定。

(我现在有一个基于匹配两者的工作实现,并选择其中(匹配开始0)最少的那个。)

1 个答案:

答案 0 :(得分:1)

\\|有什么问题? 如果将下一行复制到*scratch* - 缓冲区,请将光标放在指示位置,然后按 Cx Ce 点将移至"string in quotes"后面并且您还在消息缓冲区中获取"string in quotes"作为捕获的组1(注意,我插入?1:以在第二个正则表达式中设置组1。

(progn
  (re-search-forward
   (mapconcat 'identity
          '("^sub\\s-+\\(\\(MEAT_EATING_\\)?ANIMAL[_A-Za-z0-9]*\\)\\b"
        "^\s*animal\s+\"\\(?1:[^\"]+\\)\"")
          "\\|")
   nil t)
  (match-string-no-properties 1)) ;<< place cursor here before ';' and press C-x C-e

 animal "string in quotes"
next line