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]、それらすべてを一致させたい場合は、ボヘミアンの答えを使用するか、より一般的なアプローチ(より複雑な除外パターンで機能します)を使用して、すべての先読みを確認できます。ポジション:

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

.これは、別の文字( )が。の先頭をマークしていない場合にのみ、その文字を消費し[A]ます。+afterは後者*所有格にします。これは、この場合に適用できる最適化です。

于 2012-12-09T23:32:28.997 に答える
0

これを試して

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

これにより、最初のAとBの間にAがないことが保証されます

于 2012-12-09T23:22:44.937 に答える