捕获组如果它存在于另外两个单词

时间:2017-05-17 01:32:13

标签: regex

让我们来看看这个正则表达式:

/start[\S\s]+?(captureme)?[\S\s]+?end/g

并测试此文:

case 1:
start
captureme
suffix
end

case 2:
start
prefix
captureme
suffix
end

1)请向我解释,为什么" captureme"在案例1中被捕获到一个组中,并且在案例2中没有被捕获?

2)如果我需要,我应该使用什么" captureme"如果文本存在于最近的"开始"之间,则要捕获的文本。和"结束"不管他们之间有什么关系?

请注意,我需要这个正则表达式来匹配if" captureme"缺少:

case 3:
start
prefix
suffix
end

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用具有负前瞻的条件:

(?(?!start)(captureme)|end)

示例

https://regex101.com/r/E6ZXZe/1

你的正则表达式不匹配的原因是因为量词?表示"匹配0到1次",如果你把它从(捕获)中取出然后它应该工作,虽然如果你的正则表达式引擎允许的话,它可能更容易做出结论。

答案 1 :(得分:0)

我在正则表达式沙箱中玩游戏,这对我很有用:

start[\S\s]+?(?:(captureme)[\S\s]+?)?end