こんにちは!フリーエンジニアのヤマシタです。
PHPでは正規表現を使用して、文字列を置換することができます。
この記事では、
- preg_replace関数を使用して置換する方法
- 改行を置換する方法
- 繰り返し存在する文字列を置換する方法
- 正規表現でマルチバイトを置換する方法
- 正規表現による検索と置換
などの基本的な内容から、応用的な使い方に関しても解説していきます。
今回はそんなPHPの正規表現による置換方法について、わかりやすく解説します!
正規表現で置換する
ここでは、preg_replace関数を使用して、さまざまな置換方法を紹介します。
preg_replace関数を使用する
指定した正規表現でマッチした文字列の置換を行うためには、preg_replace関数を使用します。
preg_replace関数は、第一引数に正規表現を指定し、第二引数に置換後の文字列、第三引数に置換対象の文字列を指定します。
preg_replace( $正規表現パターン , $置換後の文字列 , $置換対象の文字列 )
なお、preg_replace関数は、PHPのバージョン7.0.0より”/e”修飾子のサポートが終了しています。
以下にpreg_replace関数を使用した、正規表現で置換する方法を記述します。
<?php $str = '現在の西暦は2016年です'; $str_grep = preg_replace('/(西暦は)2016/', '$1 2017', $str); echo $str_grep; ?>
実行結果 現在の西暦は 2017年です
サンプルでは第一引数の正規表現で()で囲った文字列を検索し、存在した場合は、2016を2017に置換しています。第二引数の置換対象の文字列の$1は、(西暦は)を指しています。
改行を置換する
preg_replace関数を使用して、改行文字列を置換(削除)することもできます。preg_replace関数を使用して、改行文字列を置換するには、第一引数の正規表現に各OSごとの改行文字コードを指定する必要があります。
改行文字コードは、”\r\n”がWindows、”\n”がMac、”\r”がLinux系の改行コードとなります。
正規表現で使用される”を使用して、改行コード文字列で使用される’\'(バックスラッシュ)を検索対象としたい場合は、”と指定する必要があります。
実際にpreg_replace関数を使用して改行コードを置換する場合は、以下のように記述します。
preg_replace('/rn|r|n/', '', $str)
繰り返し存在する場合
置換したい文字列が繰り返し存在する場合は、()で置換対処文字列を指定するだけで、簡単に指定した文字列を一括で置換することができます。
以下に文字列が繰り返し存在する場合の置換方法を記述します。
<?php $str = 'apple orange melon apple'; $str_grep = preg_replace('/(apple)/', 'banana', $str); echo $str_grep; ?>
実行結果 banana orange melon banana
正規表現でマルチバイトの文字を置換
ここでは、mb_ereg_replace関数を使用して、マルチバイト文字(2バイト以上のデータで表現される文字)を置換する方法を紹介します。
mb_ereg_replace関数を使用する
マルチバイト文字列を正規表現を使用して置換を行うには、mb_ereg_replace関数を使用します。
mb_ereg_replaceは、第一引数に正規表現を指定し、第二引数に置換後の文字列、第三引数に対象の文字列を指定します。
mb_ereg_replace( $正規表現パターン , $置換後の文字列 , $置換対象の文字列 )
なお、mb_ereg_replace関数は、PHPのバージョン7.1.0より”/e”修飾子のサポートが終了しています。
以下にmb_ereg_replace関数を使用した、マルチバイト文字列を正規表現で置換する簡単なサンプルを記述します。
<?php $str = 'ABCDEFGHIJKL'; $str_grep = mb_ereg_replace('[A-Z]', 'A', $str); echo $str_grep; ?>
実行結果 AAAAAAAAAAAA
サンプルでは、正規表現でアルファベットの大文字A-Zが存在したら、指定した文字列でマルチバイト文字列に変換しています。
正規表現による検索と置換
ここではpreg_filter関数を使用した検索と置換の方法を説明します。
preg_filter関数を使用する
正規表現にマッチしたパターンのみを置換して取得する場合には、preg_filter関数を使用します。
preg_filter関数は、第一引数に正規表現を指定し、第二引数に置換パターン、第三引数に対象の文字列を指定します。
preg_filter( $正規表現パターン , $置換パターン , $置換対象の文字列 )
戻り値は、第二引数が配列の場合は配列を返し、それ以外の場合は文字列を返します。
以下にpreg_filter関数を使用した、置換方法を記述します。
<?php $fruits = ['apple', 'orange', 'melon']; $var_grep = preg_filter('/A[apple]++z/', 'banana', $fruits); var_dump($var_grep); ?>
実行結果 array(1) { [0]=> string(6) "banana" }
サンプルでは、文字列を格納した配列に対して、要素の値に”apple”が存在したら、”banana”に置き換えています。
preg_filter関数は先述したpreg_replace関数と似ていますが、違いとしてpreg_filter関数は置換した文字列のみを返します。
正規表現についてもっと詳しく知りたい方へ
正規表現のさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
ここでは、正規表現を使用した文字列の置換について、さまざまな方法を紹介しました。
実際に文字列を置換して置き換える処理はよく使用しますので、この機会にぜひ覚えておきましょう。もし、正規表現を使用して文字列を置換する方法を忘れてしまったら、この記事を思い出してくださいね!