スライドショー

PHPで正規表現入門!7分で書き方・チェッカーツールの使い方を学ぼう

PHPでは、正規表現を使用して、文字列を検索・置換・抽出することができます。しかし、正規表現にはさまざまなパターンがあり、とっつきにくいという点もあります。そこで、この記事では

  • preg_matchの使い方
  • preg_replaceの使い方
  • preg_match_allの使い方
  • 正規表現のパターンが正しいかチェックするツールの使い方
  • その他の正規表現チェッカーの使い方

というように、基本的な内容から解説していきます。今回はそんなPHPの正規表現によるマッチング方法とチェッカーの使い方について、わかりやすく解説します!

正規表現とは?

正規表現とは、文字列の集合を1つの形式で表現する方法です。1つの形式でさまざまな意味を持たせることによって、特定の文字列を検索したり、置換することが可能です。

なお、正規表現はほとんどのプログラミング言語で使うことができます。「メールアドレス」、「電話番号」、「URL」、「ID・パスワード」、「大文字小文字」などのチェックに便利です。

書き方もとても簡単で、アルファベットの小文字のみを抽出したい場合、PHPでは以下のように記述します。

$array = ['A', 'a', 'B', 'b', 'C', 'c'];
 
$array_grep = preg_grep('/[a-z]/', $array);

上のサンプルでは、preg_grep関数を使用して、引数に正規表現パターン’/[a-z]/‘(アルファベットの小文字aからzが存在するか?)を指定しています。

正規表現のパターン構文は以下のサイトを参照してください。
http://php.net/manual/ja/reference.pcre.pattern.syntax.php

正規表現チェッカーとは?

正規表現はさまざまなパターンがあり、パターンを組み合わせて文字列を抽出する必要があるため、全てのパターンを覚えるのは難しい言えるでしょう。

そのため、PHPでは正規表現を使用する関数に正規表現チェッカーが用意されており、コーディング前に指定した正規表現のパターンが正しいかチェックすることができます。

なお、正規表現を使用した文字列の抽出・置換する方法については、以下の記事で詳しく解説しています!


【PHP入門】正規表現で置換する方法
更新日 : 2019年5月20日

【PHP入門】正規表現で検索・抽出・置換する5つの関数を使い倒せ!
更新日 : 2019年5月11日

preg_matchによるマッチング

preg_matchの使い方

preg_match関数は、指定した正規表現パターンにマッチした文字列を検索します。

書き方:

preg_match ( string $正規表現パターン , string $検索対象の文字列 [, array &$検索結果の配列 [, int $フラグ = 0 [, int $検索開始位置 = 0 ]]] )

引数:

  • 正規表現パターン:マッチさせたいパターンを指定します。
  • 検索対象の文字列:正規表現でマッチさせる対象文字列を指定します。
  • 検索結果の配列:指定した場合、検索結果が代入されます。
  • フラグ:「PREG_OFFSET_CAPTURE」を指定した場合、マッチした文字列の登場した位置(オフセット)をバイト数で取得できます。
  • 検索開始位置:デフォルトでは検索は対象文字列の先頭から開始されますが、検索の開始位置をバイト単位で指定することができます。

返り値:パターンにマッチした場合は1を返し、マッチしない場合は0を返します。

preg_match関数を使用したサンプルです。

サンプルプログラム:

<?php
$str = '好きなプログラミング言語はPHPです。';
 
echo preg_match('/PHP/', $str);
echo '<br>';
echo preg_match('/JAVA/', $str);
?>

実行結果

1
0

「preg_match(‘/PHP/’, $str)」では、検索対象の文字列$strに正規表現パターン’/PHP/’がマッチするので、「1」が表示されます。

「preg_match(‘/JAVA/’, $str)」では、正規表現パターン’/JAVA/’がマッチしないので、「0」が表示されます。

正規表現チェッカー(preg_match)

preg_match関数の正規表現チェッカーは、以下で行います。
http://php-regexp.a-zumi.net/

  • 文字列:正規表現での検索対象文字列を入力
  • 正規表現:正規表現パターンを入力
  • 結果:検索結果を出力

※以降のpreg_match、preg_match_all関数も同様

以下では指定した文字列に対して、YYYY/mm/dd形式の日付が存在するか正規表現でチェックを行い、マッチした文字列を戻り値の配列で結果に出力しています。

seiki1

引用元:正規表現チェッカー https://php-regexp.a-zumi.net/

preg_replaceによる置き換え

preg_replaceの使い方

preg_replace関数は、指定した正規表現パターンにマッチした文字列の検索及び置換を行います。

書き方:

preg_replace ( mixed $正規表現パターン , mixed $置換を行う文字列 , mixed $検索対象の文字列 [, int $置換を行う最大回数 = -1 [, int &$置換回数 ]] )

引数:

  • 正規表現パターン:マッチさせたいパターンを指定します。文字列、または配列が指定できます。
  • 置換を行う文字列:正規表現にマッチした文字列が、この文字列に置換されます。
  • 検索対象の文字列:正規表現でマッチさせる対象文字列を指定します。
  • 置換を行う最大回数:置換を行う最大回数を指定できます。デフォルトは制限なし(-1)です。
  • 置換回数:指定した場合、置換回数が代入されます。

返り値:パターンにマッチした文字列を置換して返します。

preg_replace関数を使用したサンプルです。

サンプルプログラム:

<?php
$str = '好きなプログラミング言語はPHPです。';
 
echo preg_replace('/PHP/', 'JAVA', $str);
?>

実行結果:

好きなプログラミング言語はJAVAです。 

検索対象の文字列$strで‘/PHP/’にマッチした部分が、’JAVA’に置換されます。

正規表現チェッカー(preg_replace)

preg_replace関数の正規表現チェッカーは、以下で行います。
http://php-regexp.a-zumi.net/preg_replace

以下では指定した文字列に対して、(\d{4})(日付の4文字)での正規表現でチェックを行い、マッチした場合は置換後の文字列を結果に出力しています。

seiki2

引用元:正規表現チェッカー https://php-regexp.a-zumi.net/preg_replace

また、preg_replace関数のチェッカーは「エスケープシーケンス」「メタ文字」「文字クラス」「量指定子」など正規表現を細かく指定することができます。

preg_match_allによる繰り返しマッチング

preg_match_allの使い方

preg_match_all関数は、繰り返し正規表現の検索を行う場合に使用します。

書き方:

preg_match_all ( string $正規表現パターン , string $検索対象の文字列 [, array &$検索結果の配列 [, int $フラグ = PREG_PATTERN_ORDER [, int $検索開始位置 = 0 ]]] )

引数:

  • 正規表現パターン:マッチさせたいパターンを指定します。
  • 検索対象の文字列:正規表現でマッチさせる対象文字列を指定します。
  • 検索結果の配列:フラグで指定した形式で、検索結果が代入されます。
  • フラグ:検索結果を代入する形式を指定します。
  • 検索開始位置:デフォルトでは検索は対象文字列の先頭から開始されますが、検索の開始位置をバイト単位で指定することができます。

返り値:
パターンがマッチした総数を返します。

preg_match_all関数を使用したサンプルです。

サンプルプログラム:

<?php
$str = '好きなプログラミング言語はPHPです。今日もPHPを勉強しました。';
 
echo preg_match_all('/PHP/', $str);
?>

実行結果:

2

検索対象の文字列$strで、正規表現パターン’/PHP/’が2つマッチするので、「2」が表示されます。

正規表現チェッカー(preg_match_all)

preg_match_all関数の正規表現チェッカーは、以下で行います。
http://php-regexp.a-zumi.net/preg_match_all

以下では指定したメールアドレスを、正規表現で記号ごとに区切って指定し、マッチした場合はメールアドレスの各文字列を多次元配列で出力しています。

seiki3

引用元:正規表現チェッカー https://php-regexp.a-zumi.net/preg_match_all

その他の正規表現チェッカー

正規表現をチェックするには、以下のサービスでも可能です。

正規表現チェッカー

正規表現チェッカーは、PHPのpreg_match関数とJavaScriptのmatch関数の実行結果を返してくれるツールです。

正規表現チェッカー:http://okumocchi.jp/php/re.php

正規表現のリファレンスとサンプルも用意されているため、正規表現のメタ文字を忘れてしまった場合でも便利です。

chekker

引用元:正規表現チェッカー http://okumocchi.jp/php/re.php

正規表現デバッグツール

正規表現デバッグツールは、PHPのpreg系の正規表現をテストするためのツールです。

LANDHERE 正規表現デバッグツール:http://landhere.jp/services/etc/preg_test.php

パターン修飾子の一覧も詳細に説明していますので、正規表現について不慣れな方は一読されることをオススメします。また、最新のPHPでは非対応となったパターン修飾子「e」は使用できないようになっています。

pettern

引用元:LANDHERE 正規表現デバッグツール http://landhere.jp/services/etc/preg_test.php

PHPについてもっと知りたい方へ

いかがでしたか?

PHPはさまざまで方法で正規表現で検索できることや、公式で便利なチェックツールが用意されていることがわかりましたね!

「PHPについて実はいまいちわかっていない・・・」「もっとPHPについて詳しく知りたい!」と思っている方は以下の記事も参考にしてみてください。

まとめ

今回は、正規表現を使用して、文字列を検索・置換・抽出する方法と、正規表現チェッカーについて説明しました。

正規表現を使用して文字列を検索・置換・抽出する処理は、よく使用しますのでこの機会にぜひ覚えておきましょう。もし、正規表現によるマッチング方法やチェッカーについて忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説