お役立ち情報

【PHP入門】preg_replaceを使って正規表現で置換しよう

PHPのイメージ

preg_replaceとは、PHPで文字列を置き換えるための関数です。特に正規表現での置換に使用するケースが多いため、このページではpreg_replaceを使って文字列を正規表現で置き換える方法を紹介します。

サンプルコードでは特定の正規表現とpreg_replaceで処理を行っていますが、それ以外にも正規表現の種類が複数あり、またそれと同時にpreg_replace以外にもpreg関数が存在します。

そこでpreg_replaceの使い方をサンプルコードで確認した後に、その他の正規表現とpreg関数についても紹介します。合わせて類似するコードを把握しておけば比較しながら理解が深まり、またプログラミングしていて役立つ機会があるかもしれません。

コードを知らなければ思い付くこともないので、特定のコードを学習する際は合わせてその周辺コードについても学習しておくことをおすすめします。きっちり覚えていなくても知ってさえいればいくらでも調べようがあるので、プログラミング初心者のうちは特にどのようなコードがあるのか知ることが重要です。

preg_replaceによる正規表現置換

まずpreg_replaceで正規表現に置き換える際の公式は以下のようになります。

preg_replace( $正規表現パターン , $置換後の文字列 , $置換対象の文字列 )

サンプルコードは以下です。

$ string_a = 'あいうえお12345abc';
$string_b = 'さしすせそ67890xyz';
$pattern_1 = '/うえお/';
$sample_1_a = preg_replace($pattern_1, 'どりんぐ', $string_a);
$sample_1_b = preg_replace($pattern_1, 'どりんぐ', $string_b);
echo $sample_1_a;
// 結果:あいどりんぐ12345abc
echo $sample_1_b;
// 結果:さしすせそ67890xyz
$pattern_2 = '/[0-9]{5}/';//正規表現で「0から9までの数字、5ケタ」という意味
$sample_2_a = preg_replace($pattern_2, '数字が置き換えられる', $string_a);
$sample_2_b = preg_replace($pattern_2, '数字が置き換えられる', $string_b);
echo $sample_2_a;
// 結果:あいうえお数字が置き換えられるabc
echo $sample_2_b;
// 結果:さしすせそ数字が置き換えられるxyz
$pattern_3 = '/^(.*)[0-9]{5}/';//文字列の後に「0から9までの数字5ケタ」
preg_match($pattern_3, $string_a, $sample_3_a);
preg_match($pattern_3, $string_b, $sample_3_b);
echo $sample_3_a[1];
// 結果:あいうえお
echo $sample_3_b[1];
// 結果:さしすせそ

まずpattern_1では「うえお」が「どりんぐ」に置き換わるように記述しているため、sample_1_aの方は「うえお」が「どりんぐ」に置き換わりました。sample_1_bには「うえお」の文字列が含まれていないため、何も置き換わっていません。

pattern_2では数字を文字列に置き換えています。sample_2_a、sample_2_bの両方で同じように数字が文字列に置き換わりました。

正規表現の種類

preg_replaceによる正規表現置換は上記の通りなのですが、サンプルコードで紹介した以外にも複数の正規表現があります。

preg_replace自体は紹介した通りに扱えば良いのですが、正規表現と把握しておかないとどのような置換ができるのかイメージが付きにくいかと思います。

そこで、主要な正規表現を以下に紹介しておきます。ただしすべてを覚える必要はなくて、どのような正規表現があるのかなんとなく知っておけばそれで問題ないかと思います。ざっくりと把握しておけば人が書いたソースコードを読むことができますし、自分で書く際は改めて必要な部分をリサーチして実装すれば良いだけです。

まず、正規表現に使用する特殊文字は以下のようになります。

^
行頭を表す。例えば「^abc」の4文字は、先頭が「abc」で始まる文字列を表します。文字列の途中に「abc」があってもマッチングしません。
$
行の終わりを表す。例えば、「します。$」の4文字は、行の終わりに「します。」があるとマッチングします。

.ピリオドは、改行コード以外の任意の1文字とマッチします。「第 . 章」のように指定すると、「第1章」「第2章」などがマッチします。
[abcde]
[]内のいずれか1文字とマッチします。
[12345]
[]内のいずれか1文字とマッチします。
[1-9]
1から9のいずれかの数字とマッチします。
[a-z]
aからzまでの半角小文字アルファベット1文字とマッチします。
[A-Z]
AからZまでの半角大文字アルファベット1文字とマッチします。
[a-zA-Z]
半角のアルファベット1文字(大文字、小文字関係なく)とマッチします。
[^1-9]
1から9以外の任意の1文字とマッチします。
[^abcde]
[ ]内の1文字以外とマッチします。

「または」を表します。「abc|1234」はabcという3文字か、1234の4文字にマッチします。
*
直前の1文字の0回以上の繰り返し文字とマッチします。a*は、a,aa,aaa,aaaaのような文字列とマッチします。ただし、文字が何もない状態でもマッチしてしまうので、意味がないかもしれません
+
直前の1文字の1回以上の繰り返し文字とマッチします。abc+は、abc,abcc,abcccなどにマッチします。
?
直前の文字の0回または1回だけの登場を表現します。abc?は、ab,abcとマッチします。
\
メタ文字の直前に置き、メタ文字を通常の文字として扱います。\^,\+,\\のように2文字で表します。
{n}
直前の文字がn文字続きます。
^
行頭を表します。
[0-9]
0から9までのいずれかの数字1文字を表します。
{7}
直前の文字が7文字続きます。

行の終わりを表します。

preg関数の種類

このページではpreg_replaceをメインに解説しましたが、preg関数にはpreg_replace以外にもいくつか種類があります。主なものとしては以下が挙げられます。

preg_match
正規表現によるマッチングを行います。
preg_match_all
繰り返し正規表現検索を行います。
preg_grep
パターンにマッチする配列の要素を返します。
preg_replace_callback
正規表現検索を行い、コールバック関数を使用して置換をします。
preg_filter
正規表現による検索と置換をします。
preg_split
正規表現で文字列を分割します。
preg_quote
正規表現文字をクオートします。
preg_last_error
直近の PCRE 正規表現処理のエラーコードを返します。

そこまで使用頻度が高くないものもありますが、正規表現の種類と合わせてpreg関数の種類もある程度把握しておくと便利です。使用できる機会があるかもしれません。

キャリアカウンセリングのプロとして
あなたに合った案件をご案内します。

まずはお気軽にお問い合わせください!

イメージ