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の置換はこのページを参考にさせていただいた。
スポンサーリンク