换句话说,我将问题描述为“ matchA
或B
,match foo
,然后matchA
或B
之前不匹配的”。
我可以使用以下正则表达式来做到这一点:
AfooB|BfooA
我想知道是否有更有效的方法来做到这一点?我知道如何使用"\"
,然后再使用组号来引用捕获的组。在这种情况下,我想应用类似的说法:“不是在捕获的组中匹配的选项”(并且仍然被限制为仅匹配该组的其他可能的匹配)。
我之所以要寻找比简单有效的方法,"AfooB|BfooA"
是因为我的情况"foo"
是一个很长的模式,如果可能的话,我希望减少重复。
匹配的第二时,您可以使用负前瞻与反向引用限制A
或B
:
(A|B)foo(?!\1)(A|B)
基本上,先将值(A|B)
匹配并捕获到组1中,然后再foo
匹配foo
,以(?!\1)
确保后面的文本与捕获到第一个组中的文本不同,然后只能用匹配相反的值(A|B)
。
观看此正则表达式演示
注意:如果A
和B
是单个字符,请使用字符类:([AB])foo(?!\1)([AB])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句