我的正則表達式不會選擇最接近的[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\](?!.*\[A\])(.*?)\[B\]
如果你的輸入可能包含多對[A]...[B]
(連續),並要匹配所有的人,你可以與波希米亞的答案去,或者使用更通用的方法(這將爲更復雜的排除工作模式),並在每個位置檢查前瞻:
\[A\]((?:(?!\[A\]).)*+)\[B\]
這隻會佔用其他字符(.
)如果該字符並不標誌着一個[A]
的開始。在*
之後的+
使得後者possessive,這僅僅是在這種情況下適用的優化。
試試這個
\[A\][^A]+\[B\]
這將確保有和B
你能否解釋一下你不瞭解正則表達式和結果? – Tim
另外,你正在使用哪種語言/工具? –