0

我的正则表达式没有选择最接近[A]这种情况的解决方案是什么?

输入:

[A]xxx[A]yyyy[B]

正则表达式:

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

匹配:

[A]xxx[A]yyyy[B]

我需要的比赛:

[A]yyyy[B]
4

2 回答 2

2

你实际上很接近。唯一的问题是,前瞻本身并不会一直看穿字符串。它只会查看当前位置。你可以帮助它:

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

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

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

如果该字符.没有标记[A]. +之后*使后者具有所有格,这只是适用于这种情况的优化。

于 2012-12-09T23:32:28.997 回答
0

尝试这个

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

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

于 2012-12-09T23:22:44.937 回答