利用できるPHPのバージョン | PHP 4, PHP 5, PHP 7 |
---|
PHPのpreg_match関数は文字列に対して、正規表現を用いてパターンマッチングを行うことができます。
フォームでユーザーに入力された文字列に対してpreg_match
を使ってバリデーションを行い、マッチしなければエラーを出すというような場面で使うことが多いです。
preg_match
preg_match(正規表現, 検索文字列, 検索結果, フラグ, 検索開始位置)
正規表現と検索文字列は必須のパラメータです。検索結果、フラグ、検索開始位置の3つのパラメータについては任意パラメータです。
第一引数には正規表現を表す文字列を指定します。
第二引数には正規表現でマッチさせたい文字列を指定します。
配列を指定することで、パターンにマッチした場合に検索結果を代入されます。
PREG_OFFSET_CAPTURE
を指定することで、検索結果にマッチした文字列の先頭位置をバイト数で得ることができます。
その場合は検索結果に配列を指定する必要があります。
デフォルトでは検索文字列の先頭から検索が開始されますが、この引数で検索開始位置を指定することができます。
パターンにマッチした場合は1
を返し、パターンにマッチしなかった場合は0
を返します。
一番シンプルな使い方です。$pattern
で指定した単語が$str
文字列に含まれているかをpreg_match
で判定しています。
$str
のThis is apple.
という文字列に$pattern
で指定したapple
が含まれているため、preg_match
は1
を返します。
if
文で1
はtrue
と解釈され、条件式は真となり"マッチしました。"
という文字列が出力されます。
^
は正規表現では先頭を表すメタ文字という特殊な意味を持つ文字です。また、$
は末尾を表します。
両方を用いることで、$pattern
で指定したapple
という単語と$str
で指定した文字列が完全に一致する場合に条件式が真となります。
今回、$str
にはThis is apple.
を指定しているため、条件式は偽となり"マッチしませんでした。"
という文字列が出力されます。
[]
の中では文字クラスを指定します。0-9
で半角数字、a-z
で半角英小文字、A-Z
で半角英大文字を表現します。
{}
の中では文字数を指定します。カンマ区切りすることで、左側の3文字から右側の8文字以内の文字数を表現しています。
上記の2つを組み合わせることで、3文字から8文字以内の半角英数字を$pattern
では表現することができます。
$str
のapple
は5文字なので、条件式は真となり"マッチしました。"
という文字列を出力します。
正規表現内で|(パイプライン)
で区切ることで、複数の単語を検索することができます。
apple
とlemon
の2つの単語を指定していますが、$str
の文字列にはいずれかの単語が含まれていると条件式は真となります。
どちらも含まれていない場合に条件式は偽となります。
文字列内にある文字列が含まれているかどうかを単純に調べるだけなら、preg_match
ではなくstrpos
などの他の関数を使った方が速く処理をすることができます。