【PHP入門】正規表現で置換する方法

こんにちは!フリーエンジニアのヤマシタです。

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ごとの改行文字コードを指定する必要があります。

改行文字コードは、"rn"が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関数は置換した文字列のみを返します。

正規表現についてもっと詳しく知りたい方へ

正規表現のさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

ここでは、正規表現を使用した文字列の置換について、さまざまな方法を紹介しました。

実際に文字列を置換して置き換える処理はよく使用しますので、この機会にぜひ覚えておきましょう。もし、正規表現を使用して文字列を置換する方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。