我有兴趣找到两个(或更多)正则表达式的下一个最接近的匹配。 (如果多个匹配,则最近的匹配。)正则表达式太复杂,无法使用" |"进行组合。我目前的方法是编写一个循环来查看" match-beginning",但是有一种更简单,更标准的方法来处理这种情况吗?
这是一个例子。我想要匹配:
"^sub\\s-+\\(\\(MEAT_EATING_\\)?ANIMAL[_A-Za-z0-9]*\\)\\b"
或:
"^\s*animal\s+\"\\([^\"]+\\)\""
以先到者为准。即使有办法将这些组合成一个仍然有效的正则表达式,我也不确定。
(我现在有一个基于匹配两者的工作实现,并选择其中(匹配开始0)最少的那个。)
答案 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