如何捕获A组或B组,但不是两者兼而有之?

问题描述 投票:0回答:1

我想制作一个正则表达式来捕获一串格式test1 anything hereanything here test2,但不是test1 anything here test2

有没有办法为此写一个正则表达式?基本上,我想要像/^(test1 )?(.*)$( test2)?/i,但阻止test1和test2出现。另外,我的例子是错误的,因为它永远不会超过第二个捕获组......我怎么能这样做?

编辑:我希望能够捕获anything here部分,因此它需要在自己的捕获组内。

regex
1个回答
1
投票

您可以使用负向前瞻和后视的替代方法:

(test1 (((?!test2).)*)$)|(^(((?<!test1).)*)test2)

Demo

阐释:

  • (test1 ((?!test2).)*$)找到test1的行,没有test2: test1匹配文本test1 (?!test2)负向前瞻 - 比赛场所,除非前面有test2 ((?!test2).)*是一个顽固的贪婪令牌(尽可能匹配test2文本) $终止断言,以确保没有tailingtest2

替代方案的第二部分是类似的,但我们检查没有领先的test1使用负面的lookbehind (?<!...)

值得一读:https://stackoverflow.com/a/37343088/580346

© www.soinside.com 2019 - 2024. All rights reserved.