我想制作一个正则表达式来捕获一串格式test1 anything here
或anything here test2
,但不是test1 anything here test2
。
有没有办法为此写一个正则表达式?基本上,我想要像/^(test1 )?(.*)$( test2)?/i
,但阻止test1和test2出现。另外,我的例子是错误的,因为它永远不会超过第二个捕获组......我怎么能这样做?
编辑:我希望能够捕获anything here
部分,因此它需要在自己的捕获组内。
您可以使用负向前瞻和后视的替代方法:
(test1 (((?!test2).)*)$)|(^(((?<!test1).)*)test2)
阐释:
(test1 ((?!test2).)*$)
找到test1
的行,没有test2:
test1
匹配文本test1
(?!test2)
负向前瞻 - 比赛场所,除非前面有test2
((?!test2).)*
是一个顽固的贪婪令牌(尽可能匹配test2
文本)
$
终止断言,以确保没有tailingtest2
替代方案的第二部分是类似的,但我们检查没有领先的test1
使用负面的lookbehind (?<!...)