私の正規表現は最も近いものを選択しません[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\])(.*?)\[B\]
入力に(連続して)複数のペアが含まれている可能性があり[A]...[B]
、それらすべてを一致させたい場合は、ボヘミアンの答えを使用するか、より一般的なアプローチ(より複雑な除外パターンで機能します)を使用して、すべての先読みを確認できます。ポジション:
\[A\]((?:(?!\[A\]).)*+)\[B\]
.
これは、別の文字( )が。の先頭をマークしていない場合にのみ、その文字を消費し[A]
ます。+
afterは後者*
を所有格にします。これは、この場合に適用できる最適化です。
これを試して
\[A\][^A]+\[B\]
これにより、最初のAとBの間にAがないことが保証されます