▽1
●
TransFreeBSD ●70ポイント ベストアンサー |
修飾子eを使います。置換文字列は後方参照を解決した後、evalされます。
http://ideone.com/7RFQp
http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php
preg_replace_callbackを使えば良いです。
<?php $str = "ほげ<a>リンク</a>、ここです。\n"; // php-5.3以上ならクロージャが使えるので以下のように書けます(php-5.3未満だと文法エラー) $str2 = preg_replace_callback('/(<a.*?<\/a>)|(ここ)/', function($m) { return $m[1] ? $m[1] : $m[2]; }, $str); echo $str2; // php-5.3未満の場合、その1(関数を作っておき名前で指定) function func($m) { return $m[1] ? $m[1] : $m[2]; } $str2 = preg_replace_callback('/(<a.*?<\/a>)|(ここ)/', 'func', $str); echo $str2; // php-5.3未満の場合、その2(無名関数を利用) $str2 = preg_replace_callback('/(<a.*?<\/a>)|(ここ)/', create_function('$m', 'return $m[1] ? $m[1] : $m[2];'), $str); echo $str2;
ただこの例だと、Cherenkovさんのコメントの指摘のように preg_replace('/ここ/', '<strong>$1</strong>', $str) で良いですよね?
まぁ多分、例が悪かっただけで趣旨はコールバック関数での置換方法だと思いますが。