このスニペットに関するアドバイスが必要です
$text = preg_replace('|(A.*)?A(.*)C|', '$1foo$2bar', $text);
これは「ABABCD」のABCと一致し、「ABfooBbarD」に置き換えられます。ご覧のとおり、これは最初の「AB」の部分にも一致します。これは、失わないように、$1の置換文字列で繰り返す必要があります。
これはそのような結果を得るための最良の方法ですか?
次のようなフラグXはありますか
$text = preg_replace('|A(.*)C|X', 'foo$1bar', $text);
同じ結果が得られますか?
はっきりしているといいのですが
ありがとうございました!
編集:A、B、Cを任意の文字のアトミック文字列と見なし、空白を含めることもできます
また、提示された例は、「ABC ABC」の2番目の「ABC」にのみ一致するため、実際にはバグがあります。
EDIT2:申し訳ありませんが、私はおそらく問題を非常にひどく説明しました。重要なのは、2つのA、C文字列の間にあるものをすべて一致させて、一致にサブ文字列Aがないようにすることです。
もう一度ありがとう