正規表現:マッチングと「AB ABC D」でABCを置き換えます
-
22-08-2019 - |
質問
私は
このスニペット上のアドバイスが必要$text = preg_replace('|(A.*)?A(.*)C|', '$1foo$2bar', $text);
これは、 "AB ABC D" でABCと一致し、 "AB fooBbar D" と交換します。あなたが見ることができるようにこれは私がそれを失わないためには、$ 1を置換文字列に繰り返す持っている、先頭に「AB」の部分と一致し、同様ます。
このような結果を得るための最良の方法ですか?
など
そのフラグXがあります$text = preg_replace('|A(.*)C|X', 'foo$1bar', $text);
同じ結果を生成する?
私が明らかになってきた願っています。
ありがとうございます!
編集:これらは同様に空白を含めることができ、任意の文字の原子列として、B、Cを検討
それは「ABC ABC」にのみ第二「ABC」と一致するようにまた、提示された例では、実際のバギーである。
のEDIT2の:私は申し訳ありませんが、私はおそらく非常に悪い問題を説明してきました。ポイントは、私が一致させたいと思いますでのどんなのある2つのA、Cの文字列の間に、何のサブストリングAが試合中に存在しないように、
ここでも感謝
解決
問題が明らかにされているように、この表現を試します:
preg_replace('/(?:A)+(.+?)(?:C)+/', 'foo$1bar', $text)
例:
$A = 'abc'; $B = '123'; $C = 'xyz';
$text = "$A$B$C $A$A$B$C $A$B$C$C";
echo preg_replace("/(?:$A)+(.+?)(?:$C)+/", 'foo$1bar', $text);
他のヒント
これはどうます:
$text = preg_replace('|A(\S*)C|', 'foo$1bar', $text);
あなたが異なる単語間で置き換えることはありませんので、 \S
は、非空白文字にマッチします。
OPのコメントのいくつかを見た後、私は別の推測をハザードます
$text = preg_replace('|A(B)C|', 'foo$1bar', $text);
*
の数量詞の非欲張りバージョンを使用します:
$text = preg_replace('|(.*)(A.*?C)|', '$1foo$2bar', $text);
所属していません StackOverflow