我的正则表达式没有选择最接近的[A]
这个案例可以解决什么问题?
输入:
[A]xxx[A]yyyy[B]
正则表达式:
\[A\](?!\[A\])(.*?)\[B\]
匹配度:
[A]xxx[A]yyyy[B]
匹配我需要:
[A]yyyy[B]
答案 0 :(得分:2)
你真的很亲密。唯一的问题是前瞻不会一直看到字符串。它只会查看当前位置。你可以帮助它:
\[A\](?!.*\[A\])(.*?)\[B\]
如果你的输入可能包含多对[A]...[B]
(连续)并且你想要匹配所有这些,你可以选择Bohemian的答案,或者使用更一般的方法(这将适用于更复杂的排除)模式)并检查每个位置的前瞻:
\[A\]((?:(?!\[A\]).)*+)\[B\]
如果该字符未标记.
的开头,则只会消耗另一个字符([A]
)。 +
之后的*
生成后者possessive,这只是适用于此情况的优化。
答案 1 :(得分:0)
试试这个
\[A\][^A]+\[B\]
这确保了第一个A和B之间没有A