preg_replaceを使った複数語句の置き換え

公開
更新日

スポンサーリンク

phpでpreg_replaceを使い、複数の置き換え候補を置換するやり方について。

文章中から、いくつかある置き換え候補語句をすべて置き換えるようなときに使う。つまり、fooとbarどちらもstrongタグで囲みたいというような時。典型的な使用例はテキスト中にある全てのURL文字列をリンクにするような場合。

$str = "hoge hoge foo hoge bar hoge"
$regexp = "(foo)|(bar)";
$text = preg_replace( "/{$regexp}/u" , "<strong>\\0</strong>" , $str );
echo $text;//hoge hoge <strong>foo</strong> hoge <strong>bar</strong> hoge

正規表現で“or”は“|”なので、置換候補語句を“|”を使って並べる。上の例では“(foo)|(bar)”で、“foo”または“bar”を置換する。

置き換え後の語句に、ヒットした語句を使う場合は“\\0”を第2引数に用いる。“<strong>\\0</strong>”とすることで、\\0の位置にfooならfoo、barならbarが入ってくる。

文章中の数字をすべてstrongタグで囲む場合ならこうなる。

$text = "それは2001年1月1日のことだった。";
preg_replace( "/\d/u" , "<strong>\\0</strong>" , $text );

文章中のURL文字列をaタグで囲みリンク化するコードも、ここに書いたやり方を使う。

$str = "リンクを張っていないURL文字列http://domain.comwを含んだ文章";
$a = preg_quote('-._~%:/?#[]@!$&\'()*+,;=', '/');
$regexp = '/((http|https):\/\/[0-9a-z' . $a . ']+)/iu';
$str = preg_replace ( $regexp , '<a href="\\0">\\0</a>' , $str );

URLの置換はこのページを参考にさせていただいた。

スポンサーリンク


Comment