我想制作一个正则表达式来捕获格式test1 anything here
或anything here test2
的字符串,但不 test1 anything here test2
。
有没有办法为此编写正则表达式?基本上,我想要像/^(test1 )?(.*)$( test2)?/i
这样的东西,但是阻止test1和test2出现。另外,我的例子是错误的,因为它永远不会超过第二个捕获组......我怎么能这样做?
编辑:我希望能够捕获anything here
部分,因此它需要位于自己的捕获组内。
答案 0 :(得分:1)
你可以使用负向前瞻和后瞻的替代方法:
(test1 (((?!test2).)*)$)|(^(((?<!test1).)*)test2)
阐释:
(test1 ((?!test2).)*$)
找到包含test1
且没有test2的行:
test1
匹配文字test1
(?!test2)
否定前瞻 - 匹配地点,除非提前test2
((?!test2).)*
是一个驯化的贪婪令牌(尽可能匹配test2
文字)$
行尾断言以确保没有拖尾test2
备选方案的第二部分是类似的,但我们检查没有使用负面后顾问test1
(?<!...)