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では正規表現を使用する関数に正規表現チェッカーが用意されており、コーディング前に指定した正規表現のパターンが正しいかチェックすることができます。
なお、正規表現を使用した文字列の抽出・置換する方法については、以下の記事で詳しく解説しています!
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形式の日付が存在するか正規表現でチェックを行い、マッチした文字列を戻り値の配列で結果に出力しています。
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文字)での正規表現でチェックを行い、マッチした場合は置換後の文字列を結果に出力しています。
また、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
以下では指定したメールアドレスを、正規表現で記号ごとに区切って指定し、マッチした場合はメールアドレスの各文字列を多次元配列で出力しています。
その他の正規表現チェッカー
正規表現をチェックするには、以下のサービスでも可能です。
正規表現チェッカー
正規表現チェッカーは、PHPのpreg_match関数とJavaScriptのmatch関数の実行結果を返してくれるツールです。
正規表現チェッカー:http://okumocchi.jp/php/re.php
正規表現のリファレンスとサンプルも用意されているため、正規表現のメタ文字を忘れてしまった場合でも便利です。
正規表現デバッグツール
正規表現デバッグツールは、PHPのpreg系の正規表現をテストするためのツールです。
LANDHERE 正規表現デバッグツール:http://landhere.jp/services/etc/preg_test.php
パターン修飾子の一覧も詳細に説明していますので、正規表現について不慣れな方は一読されることをオススメします。また、最新のPHPでは非対応となったパターン修飾子「e」は使用できないようになっています。
PHPについてもっと知りたい方へ
いかがでしたか?
PHPはさまざまで方法で正規表現で検索できることや、公式で便利なチェックツールが用意されていることがわかりましたね!
「PHPについて実はいまいちわかっていない・・・」「もっとPHPについて詳しく知りたい!」と思っている方は以下の記事も参考にしてみてください。
まとめ
今回は、正規表現を使用して、文字列を検索・置換・抽出する方法と、正規表現チェッカーについて説明しました。
正規表現を使用して文字列を検索・置換・抽出する処理は、よく使用しますのでこの機会にぜひ覚えておきましょう。もし、正規表現によるマッチング方法やチェッカーについて忘れてしまったら、この記事を思い出してくださいね!