我的正则表达式没有选择最接近[A]
这种情况的解决方案是什么?
输入:
[A]xxx[A]yyyy[B]
正则表达式:
\[A\](?!\[A\])(.*?)\[B\]
匹配:
[A]xxx[A]yyyy[B]
我需要的比赛:
[A]yyyy[B]
我的正则表达式没有选择最接近[A]
这种情况的解决方案是什么?
输入:
[A]xxx[A]yyyy[B]
正则表达式:
\[A\](?!\[A\])(.*?)\[B\]
匹配:
[A]xxx[A]yyyy[B]
我需要的比赛:
[A]yyyy[B]
你实际上很接近。唯一的问题是,前瞻本身并不会一直看穿字符串。它只会查看当前位置。你可以帮助它:
\[A\](?!.*\[A\])(.*?)\[B\]
如果您的输入可能包含多对[A]...[B]
(连续)并且您想要匹配所有这些,您可以使用 Bohemian 的答案,或者使用更通用的方法(这将适用于更复杂的排除模式)并在每个位置:
\[A\]((?:(?!\[A\]).)*+)\[B\]
如果该字符.
没有标记[A]
. +
之后*
使后者具有所有格,这只是适用于这种情况的优化。
尝试这个
\[A\][^A]+\[B\]
这确保了第一个 A 和 B 之间没有 A