2016-09-22 10 views
2

preg_replace()またはpreg_replace_callback()に1つの逆参照を置き換える方法がありますか?たとえば、私はこの正規表現/(\.popup)([\s\.{])/とこの文字列.popup .popup-optionを持っています。生成される後方参照は、$0 = .popup\s,$1 = .popup,$2 = \sである。 $1だけを別の文字列で置き換えたいとします。これをどうすればできますか?PHPの正規表現 - 後方参照を1つ置き換える

ありがとうございました。我々はいくつかの置換文字列を返却するコールバックで

$s = '.popup .popup-option'; // original string 

echo preg_replace_callback('/(\.popup)([\s\.{])/', function ($m) { 
    return 'foo' . $m[2]; }, $s); 
//=> foo .popup-option 

foo$m[2]と連結ためだけ$m[1]を交換行き方:

答えて

3

あなたはこのようpreg_replace_callbackを使用することができます。


は先読みを使用して、あなたが preg_replaceで同じことを行うことに注意してください:私が行方不明になった

echo preg_replace('/\.popup(?=[\s\.{])/', 'foo', $s); 
//=> foo .popup-option 
+1

唯一のシナリオは、それが唯一の '.popup'この正規表現では動作しないことができるということでしたなぜなら、それはスペース、ドット、または{}のいずれかが続く必要があると具体的に言っているからです。いずれにせよ、あなたの答えは '/ \。popup((?= [\ s \。{])| \ z)/' –

関連する問題