贪婪的正则表达式并没有选择最接近的选择

时间:2012-12-09 23:10:06

标签: regex

我的正则表达式没有选择最接近的[A]这个案例可以解决什么问题?

输入:

[A]xxx[A]yyyy[B]

正则表达式:

\[A\](?!\[A\])(.*?)\[B\]

匹配度:

[A]xxx[A]yyyy[B]

匹配我需要:

[A]yyyy[B]

2 个答案:

答案 0 :(得分:2)

你真的很亲密。唯一的问题是前瞻不会一直看到字符串。它只会查看当前位置。你可以帮助它:

\[A\](?!.*\[A\])(.*?)\[B\]

如果你的输入可能包含多对[A]...[B](连续)并且你想要匹配所有这些,你可以选择Bohemian的答案,或者使用更一般的方法(这将适用于更复杂的排除)模式)并检查每个位置的前瞻:

 \[A\]((?:(?!\[A\]).)*+)\[B\]

如果该字符未标记.的开头,则只会消耗另一个字符([A])。 +之后的*生成后者possessive,这只是适用于此情况的优化。

答案 1 :(得分:0)

试试这个

\[A\][^A]+\[B\]

这确保了第一个A和B之间没有A