PHPのpreg_matchで正規表現によるマッチングする方法

プログラミング初心者向けにPHPのpreg_matchを使って正規表現によるパターンのマッチングをする方法について解説しています。正規表現を利用することで検索や置換の幅も広がるので、ぜひ使い方を覚えておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

ここでは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サービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。