PHPでは、正規表現を使ったルールに該当する文字列を簡単に検索できる関数が用意されています。
そこで今回は、文字列検索で使用する関数の使い方について解説していきます。また、検索パターンに該当した文字列のみを抽出する関数についても紹介します。
目次
PHPにおける文字列の正規表現とは
正規表現とは、決められたルールに従って記述された文字列のことです。
PHPのプログラミングにおいても、住所や電話番号、メールアドレス、日付などは決められた形式で表記された文字列で扱う場合がほとんどです。これにより、各データの処理を簡単にできるようになります。
例えば、住所に含まれる文字列から、「特定の都道府県に済むユーザーのみを検索する」といった処理を簡単に行うことができます。
PHPの正規表現を使って文字列を検索する方法
PHPプログラミングで、正規表現を使って特定のパターンに該当する文字列を検索するには、preg_match関数かpreg_match_all関数を使用します。
それぞれの違いは次の通りです。
- preg_match関数:一致する文字列が見つかった時点で検索終了
- preg_match_all関数:一致する文字列が見つかった後も検索を続ける
それでは、各関数の使い方について詳しくみていきましょう。
preg_match関数の使い方
preg_match関数は、ユーザーの新規登録などで、各種情報が正しく入力されているかチェックする際などに使用します。
preg_match関数の使い方は次の通りです。
1 |
preg_match(‘/検索パターン/’,’検索対象文字列’); |
第一引数には、検索したい文字列パターンを正規表現で指定します。
第二引数には、検索対象とする文字列や変数、配列を指定します。
第一引数で指定した文字列パターンが、第二引数で指定した文字列内に含まれていた場合、preg_match関数は、戻り値としてTRUEを返します。
それでは、実際にpreg_match関数を使用して文字列を検索してみましょう。
1 2 3 4 5 6 7 8 9 10 11 |
<?php $text = '東京都港区六本木x-x-x'; if (preg_match('/^東京都/', $text)){ echo '東京都に在住です'; }else{ echo '東京都以外に在住です'; } ?> |
上記のコードでは、変数$textに含まれる文字列が東京都から始まるかを検索しています。これは住所によって処理を分岐したいときなどに活用することができます。
他にも、ユーザーが入力した郵便番号から、該当する住所を出力させることで、誤入力を減らすことに活用することもできます。
preg_match_all関数の使い方
preg_match_all関数は、正規表現で指定した文字列パターンが見つかった後も、さらに検索を続けます。検索対象に対して、指定する文字列パターンが複数該当する可能性がある場合、preg_match_all関数を使用するようにしましょう。
preg_match_all関数の使い方は次の通りです。
1 |
preg_match_all(‘/検索パターン/’,’検索対象文字列’ [, $配列]); |
基本的な書き方は、preg_match関数と同じです。第三引数に配列を指定することで、マッチしたテキストが配列に格納されます。
それでは、実際にpreg_match_all関数を使用して文字列を検索してみましょう。
1 2 3 4 5 |
<?php $age = '15 19 30 41 26 38 17 22 20 31'; $reg = preg_match_all('/[2]{1}[0-9]{1}/',$age,$matches); print_r($matches); ?> |
(
[0] => Array
(
[0] => 26
[1] => 22
[2] => 20
)
)
上記コードでは、変数$ageに含まれる文字列の中から、20~29の値を検索しています。この処理は、取得したデータ内に含まれる対象年齢の数をチェックする場合などに活用できます。
PHPの正規表現を使って文字列を抽出する方法
PHPでは、正規表現を使って文字列を検索し、一致した文字列のみを抽出することができます。PHPプログラミングにおける文字列の抽出は、preg_match関数かpreg_grep関数を使用します。
それぞれの違いは次の通りです。
- preg_match関数:検索パターンにマッチした文字列を抽出する
- preg_grep関数:検索パターンにマッチした文字列を配列から抽出する
それでは、各関数の使い方について詳しくみていきましょう。
preg_match関数の使い方
preg_match関数を使うことで、検索した文字列パターンに一致する対象文字列を抽出することができます。
preg_match関数の使い方は次の通りです。
1 |
preg_match(‘/検索パターン/’,’検索対象文字列’ [, $配列]); |
preg_match関数では、第三引数に指定した配列に検索パターンにマッチした文字列が格納されます。
それでは、実際にpreg_match関数を使って文字列を抽出してみましょう。
1 2 3 4 5 6 7 8 |
<?php $date_text = '今日は2020/01/01です。'; preg_match('/\d{4}\/\d{2}\/\d{2}/', $date_text, $date_match); var_dump($date_match); ?> |
[0]=>
string(10) “2020/01/01”
}
上記コードでは、文字列の中から検索パターンにマッチする年月日を抽出して、配列$date_matchに格納しています。
preg_grep関数の使い方
preg_match関数では、文字列の中から検索パターンに一致する文字列を抽出しました。一方、preg_grep関数では、配列の要素から検索パターンに一致する対象文字列を抽出することができます。
preg_grep関数の使い方は次の通りです。
1 |
preg_grep(‘/検索パターン/’,’検索対象の配列’ [, $フラッグ = 0]); |
なお、preg_grep関数の第三引数である$フラッグにPREG_GREP_INVERTを指定した場合、検索パターンにマッチしない要素を返すようになります。
それでは、実際にpreg_grep関数を使って、配列から文字列を抽出してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $info = [ '090-1234-5678', '〒000-1111', '東京都xx区xxx' ]; $post = preg_grep('/〒\d{3}-\d{4}/', $info); print_r($post); ?> |
(
[1] => 〒000-1111
)
上記コードでは、個人情報が格納された配列の中から「〒」を検索パターンに使って、郵便番号を抽出しています。
まとめ
PHPでは、preg_match関数かpreg_match_all関数を使うことで正規表現の文字列検索ができます。また、preg_match関数かpreg_grep関数を使って検索パターンに合致した文字列の抽出もできます。
正規表現を使った文字列検索は、ユーザー情報を管理するWebシステムでは必ずといっていい程、使われている機能です。各関数の使い方も、特に難しいわけではないので、この機会に正規表現を使って文字列を検索できるようになりましょう。