PHPで文字列を正規表現で置換する:preg_replace関数

投稿日: 作成:   更新:

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、改行コードの置換)

今回は、正規表現パターンにマッチする文字の置換について説明しましたが、
正規表現そのものは、他のプログラミング言語でも共通して使えます。

これを機に正規表現の使い方を覚えてみてはいかがでしょうか?

正規表現について詳しく勉強したい方は、オライリー本がオススメです。