【正規表現】PHPでの文字列の置換方法【現役エンジニアが解説】

PROGRAM

今回は、PHPでの文字列の置換について、正規表現を使わない場合と使う場合に分け、簡単に解説していきます。

PHPでの文字列の置換方法

PHPで文字列の置き換えを行う場合には、str_replace関数が最も使いやすいでしょう。

$val = "山田様、田中様、小林様";
$val = str_replace("様","",$val);
// $valは"山田、田中、小林"となる。

この関数は第一引数に検索文字列、第二引数に置換後文字列、第三引数に対象文字列を指定します。

str_replace関数では、検索文字列で検索をかけ、ヒットしたものを全て置き換えてくれるため、便利です。

$val = "山田様、田中商事御中、小林商店御中";
$val = str_replace(array("様","御中"),"",$val);
// $valは"山田、田中商事、小林商店"となる。

上記のように、str_replace関数は第一引数を配列にすることができるため、検索文字列を複数にすることも可能です。

PHPの正規表現による文字列の置換方法

str_replace関数も便利ですが、正規表現で置き換えることもよくあります。

$val = "山田 太郎、山田 花子";
$val = preg_replace("/( | )+/u","",$val);
// $valは"山田太郎、山田花子"となる。

PHPの場合は、正規表現で置き換える場合にはpreg_replace関数を使います。

preg_replace関数では第一引数に検索文字列の正規表現、第二引数に置換後文字列、第三引数は対象文字列を指定します。

正規表現であっても検索文字列はそのまま書けば良いですが、「*」は直前の文字の0回以上の繰り返し、「+」は直前の文字の1回以上の繰り返しを表しますので覚えておきましょう。

「.」は任意の文字列を表し、「.*」や「.+」といった組み合わせは任意の文字列の繰り返しとしてよく用いられる組み合わせですし、「|」もORを意味する記号のため、頻出記号として覚えておくことをおすすめします。

正規表現については詳しく解説されているサイトで別途学んで頂きたいのですが、preg_replace関数で使う場合は正規表現の最初と最後に「/」が必要になり、Unicodeなら最後の「/」の後ろにさらに「u」も必要となりますので、そこだけはPHP特有のものとしてこの際に押さえておいて下さい。

PHPの正規表現による入力文字列のチェック

正規表現は文字列の置き換えだけでなく、入力文字列のチェックでもよく利用されます。

if (preg_match("/^[0-9]{10}$/u", $val)) {
    echo "半角数字10桁です。";
} else {
    echo "半角数字10桁ではありません。";
}

上記のサンプルコードは固定電話番号等のチェックを想定した、入力文字列が半角数字10桁かどうかチェックするコードです。

正規表現の入力文字列のチェックではpreg_match関数を使い、第一引数には検索文字列の正規表現、第二引数には対象文字列を指定します。

ここで出てくる正規表現のうち、「{}」で囲われている数字は直前の文字列の繰り返し回数を表しており、ここでは0から9の数字が10回繰り返されることを意味しています。

「[]」で囲っている理由は文字列を複数列挙したいからであり、中の「-」はエスケープなしの場合ではその左の値から右の値までの範囲を表すので、今回の場合「0から9まで」となるわけです。

正規表現では、文頭を意味する記号として「^」が、文末を意味する記号として「$」があり、これを付けなければ、検索文字列の前後に任意の文字列が入る余地を与えてしまうので注意が必要です。