2012-12-09 49 views
0

我的正則表達式不會選擇最接近的[A]什麼可以解決這種情況?貪婪的正則表達式不會選擇最接近的選擇

輸入:

[A]xxx[A]yyyy[B] 

正則表達式:

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

比賽:

[A]xxx[A]yyyy[B] 

比賽,我需要:

[A]yyyy[B] 
+1

你能否解釋一下你不瞭解正則表達式和結果? – Tim

+0

另外,你正在使用哪種語言/工具? –

回答

2

第一A之間沒有一個你實際上是密切。唯一的問題是前瞻並不是單獨看字符串。它只會查看當前位置。你可以幫助它雖然:

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

如果你的輸入可能包含多對[A]...[B](連續),並要匹配所有的人,你可以與波希米亞的答案去,或者使用更通用的方法(這將爲更復雜的排除工作模式),並在每個位置檢查前瞻:

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

這隻會佔用其他字符(.)如果該字符並不標誌着一個[A]的開始。在*之後的+使得後者possessive,這僅僅是在這種情況下適用的優化。

0

試試這個

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

這將確保有和B