PHPで文字列を正規表現で置換するには「preg_replace関数」を使います。
- preg_replace関数の使い方が知りたい。
- 改行を置換したい。
- URLをaタグでリンクにしたい。
このような内容について解説します。
私はWEB開発中心に、フロントエンド、サーバーサイド、サーバー構築など経験豊富なエンジニアです。
少しでも分かりやすく解説していきたいと思います。
preg_replace関数は、正規表現で指定したパターンで置換できますので、
DBの値をHTMLタグに変換したりするのによく使われます。
それでは行きましょう!
preg_replace関数とは
preg_replace(正規表現パターン, 置換後の文字, 対象文字)
引数 | 第1引数:正規表現パターンを指定します。(string) 必ず「/(スラッシュ)」で囲んで指定します。 例:’/PHP/’ |
---|---|
第2引数:置換後の文字を指定します。(string) | |
第3引数:置換される対象文字を指定します。(string) |
|
戻り値 | 対象文字が置換された後の文字列が返ります。(string) |
※第1引数、第2引数に配列を指定できますが、この記事では割愛します。
preg_replace関数の使い方
次のソースコードでは、先頭にある「イチゴ」を「バナナ」に置換しています。
「^」は正規表現で先頭をあらわします。
<?php // 対象文字 $val = 'イチゴは甘くて美味しい'; // 先頭から始まる「イチゴ」を「バナナ」に置換して表示 echo preg_replace('/^イチゴ/', 'バナナ', $val); ?>
実行結果:

「バナナ」に置換することができました。
ここまでの例では、str_replace関数とたいして変わりがないので、次に実践での使用例をご紹介します。
実践の使用例を紹介
冒頭でも説明しましたが、preg_replace関数は正規表現パターンで置換ができるため、DBの値をHTMLタグに変換したりするのによく使われます。
URL文字をリンクにする
preg_replace関数を使う場面として、よく使われるのがURL文字をリンクにすることではないでしょうか。
次のソースコードでは、$valに入っているURL部分をaタグに置換しています。
<?php // 対象文字 $val = '当サイトのURLは https://nagablog.info/ です。'; // URLの正規表現パターン $urlPattern = '/https?(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/'; // aタグに置換する echo preg_replace($urlPattern, '<a href="\\0">\\0</a>', $val); ?>
実行結果:

URLを文字をリンク変換することができました。
preg_replaceの第2引数に「\\0」が入っていることについて次で説明します。
「\\0」部分はpreg_match関数で確認する
「\\0」部分は正規表現パターンのマッチした配列の0番目の値を指します。
preg_matche関数の第3引数を使用すると、マッチした内容が確認できます。
確認方法を次のソースコードに書いてみました。
<?php $val = '当サイトのURLは https://nagablog.info/ です。'; $urlPattern = '/https?(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/'; // マッチしたパターンを入れる配列を用意してから実行 $matches = []; preg_match($urlPattern, $val, $matches); // 正規表現パターンのマッチ内容を確認 var_dump($matches); ?>
実行結果:

$matchesの中を確認すると、0番目に「https://nagableg.info/」の文字が入っています。
preg_replace関数ではこの0番目の値を「\\0」して置換後の文字にURLが入るようにしています。
改行コードをbrタグへ置換
HTMLで改行表示するのに、preタグで囲うという手段もありますが、
brタグで表示したい場面も出てきます。
このようなときは、正規表現「\n」で改行をbrタグに変換します。
次のソースコードでは$valの中に改行が入っており、
「バナナは南国の食べ物です。[改行]色は黄色で美味しいです。」
この[改行]の文字をbrタグに置換しています。
<?php // 改行が入った文字 $val = 'バナナは南国の食べ物です。 色は黄色で美味しいです。'; // 改行を「brタグ」に置換 echo preg_replace('/\n/', '<br>', $val); ?>
実行結果:

今回は改行コードが「LF」であるため、正規表現には「\n」と記載しています。
改行コードについては、この記事では触れませんので、
「cr lf 正規表現」でGoogle検索いただければと思います。
まとめ
PHPで文字列を正規表現で置換するpreg_replace関数について解説しました。
- preg_replace関数とは
- preg_replace関数の使い方
- 実践の使用例を紹介(URL、改行コードの置換)
今回は、正規表現パターンにマッチする文字の置換について説明しましたが、
正規表現そのものは、他のプログラミング言語でも共通して使えます。
これを機に正規表現の使い方を覚えてみてはいかがでしょうか?
正規表現について詳しく勉強したい方は、オライリー本がオススメです。