PHPのpreg_matchで正規表現によるマッチングする方法
プログラミング初心者向けにPHPのpreg_matchを使って正規表現によるパターンのマッチングをする方法について解説しています。正規表現を利用することで検索や置換の幅も広がるので、ぜひ使い方を覚えておきましょう。
TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。
ここではpreg_matchについてご紹介します。
正規表現を利用することで、文字列の検索や置換を行うことができます。正規表現であれば「〇〇という文字を含んでいれば」や「〇〇という文字から始まれば」といった指定をすることができます。
ぜひ使い方をマスターしていきましょう。
そもそもPHPが何か分からない場合は、先にPHPとはの記事をご覧ください。
なお本記事は、TechAcademyのPHPオンライン講座の内容をもとにしています。
preg_matchとは
preg_matchではある文字列から正規表現で指定したパターンにマッチした文字列を検索することができます。パターンにマッチした場合は1を返し、マッチしなかったら0を返します。
例えば、検索対象の「これからphpを勉強します。」という文字列から、パターン「php」を検索すると1を返します。一方「ruby」を検索すると0を返します。
「php」の場合は文字列内にありますが、rubyはないのでこういった結果になるということです。
他にも大文字・小文字を区別せずにパターンにマッチさせることや、指定文字列が先頭にあるだけマッチさせることもできます。

正規表現で指定したパターンにマッチするかどうかって少し難しいですね。

そうだね。簡単に言うと、ある形式にマッチしているかどうかってことなんだ。

ある形式とは何ですか?

例えばメールアドレスの形式になっているかどうかだったり、電話とか日付でもいいね。そういう単純には表せないものに使うんだよ。書き方を見てみよう!
preg_matchの書き方
preg_matchの書式を以下になります。[ ]はオプションで省略できます。
返り値 = preg_match(/正規表現パターン/,検索対象の文字列,[配列],[動作フラグ],[検索開始位置])
「返り値」はパターンにマッチすれば1、マッチしなければ0となります。
「正規表現パターン」でマッチさせたいパターンを指定します。正規表現は/で囲んで記述します。
「検索対象の文字列」では正規表現でマッチさせる対象文字列となります。
「配列」を指定した場合は、検索結果が配列として代入されます。
「動作フラグ」で「PREG_OFFSET_CAPTURE」を指定するとマッチした文字列の登場した位置(オフセット)をバイト数で取得することができます。
「検索開始位置」で先頭ではなく検索を始めたい位置を指定することもできます。
ただし、指定はバイト数なので注意が必要です。
[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中
実際に書いてみよう
それでは実際にpreg_match関数を使用して、phpのプログラムを書いてみましょう。
文字列「PHP」を検索する
以下は文字列「PHP」にマッチするか確認しています。
<?php if (preg_match("/PHP/", "今PHPを勉強しています。")) { echo "マッチしました。"; } else { echo "マッチしませんでした。"; } ?>
出力結果
$php 01.php マッチしました。
文字列「PHP」を大文字、小文字を区別せずに検索する
以下では大文字・小文字の区別をせずにマッチするか確認しています。
<?php if (preg_match("/PHP/i", "今phpを勉強しています。")) { echo "マッチしました。"; } else { echo "マッチしませんでした。"; } ?>
出力結果
$ php 02.php マッチしました。
文字列「PHP」を検索し、登場位置も取得する
<?php if (preg_match("/PHP/", "今PHPを勉強しています。",$data,PREG_OFFSET_CAPTURE)) { echo "マッチしました。"; } else { echo "マッチしませんでした。"; } print_r($data) ?>
出力結果
$ php 03.php マッチしました。Array ( [0] => Array ( [0] => PHP [1] => 3 ) )
PHPは検索対象の文字列の3バイト目に登場しています。
おわりに
preg_matchで正規表現を使うと様々な条件に一致させることができます。今回の例以外に郵便番号や電話番号にマッチさせることができ非常に強力です。
ぜひこの機会にpreg_matchで正規表現を使ってみましょう。
PHPをさらに勉強したい場合は、PHPで構文チェックを行う方法、PHPとHTMLをまとめてコメントアウトする方法についても合わせて読んでみてください。

単純な文字列があるかどうか、の判定をしていますけど、PHPという文字列があるって、ちゃんと出てますねー。

文字列かあるかどうかっていう判定も出来るんだ。本当は正規表現を使うものに対してpreg_match関数を使った方がいいんだ。

正規表現って難しそうですね。

簡単ではないよね。ただ、少しずつ慣れていけば大丈夫。とりあえずpreg_match関数があって、正規表現のパターンでマッチするかどうかを判断できるって覚えておけばいいよ。
PHPを勉強していて、
- もっと効率的に勉強したい
- 誰かに聞きながら学びたい
- 自分でWebサービスを作りたい
と思ったことはないでしょうか。
そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。
独学に限界を感じている場合はご検討ください。