标题听起来可能有点复杂,所以让我显示一个简化的示例。我有一个像这样的测试字符串:
A ...
aaa
... Z
A ...
bbb
... Z
A ...
ccc
... Z
A ...
cxc
... Z
A ...
ccc
... Z
A ...
cxc
... Z
如果我想匹配所有可用区,则很简单:
(?s)A.*?Z
如果我想匹配中间所有不带“ c”的AZ部分,那也很容易:
(?s)A[^c]*?Z
但是我实际上想要做的是匹配所有AZ部分,中间没有“ ccc”。我尝试了前瞻性断言:
(?s)A(?!.*ccc).*?Z
但这仅与最后一个AZ部分匹配,因为实际上所有其他AZ部分后面都带有“ ccc”。
那么,可以以某种方式并在单个正则表达式中完成此操作吗?不幸的是,第一步仅匹配所有AZ部分,而第二步则删除带有“ ccc”的部分。
您可能会怀疑这是一个HTML解析问题,但我对其进行了简化以分离出该问题。
您的正则表达式需要进行一些修改:
(?s)A(?:(?!ccc).)*?Z
(?!ccc)
是一个否定的前瞻,断言A
之后没有ccc
。该.
先行后做的所有匹配。它一次使文本前进一个字符,并确保每个位置后都不跟一个ccc
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句