PHP 正規表現に関する関数
主な正規表現
意味 | 正規表現 | 記述例 | 記述例の意味 |
---|---|---|---|
文字列の冒頭 | ^ | ^line | 冒頭にある「line:」 |
文字列の終端 | $ | 。$ | 終端にある「。」 |
改行文字を除く任意の1文字 | . | ... | 任意の3文字。例えば「abc」,「xyz」などにマッチ |
いずれか | [] | [abc] | 「a」,「b」,「c」のいずれか1文字 |
文字の範囲 | - | [a-zA-Z0-9] | a ~ z ,A ~ Z, 0 ~ 9のいずれか1文字 |
以外 | [^] | [^0-9] | 0 ~ 9以外の1文字 |
指定回数の繰り返し | {n} | [0-9]{3} | 0 ~ 9の連続する3文字 |
指定回数の繰り返し範囲 | {n,m} | [a-zA-Z]{1,3} | アルファベットの1~3回の繰り返し。「ab」や「ABC」などがマッチする |
1回以上の繰り返し | + | [a-zA-Z]+ | アルファベットの1回以上の繰り返し。「a」や「abcde」などがマッチする |
0回以上の繰り返し | * | abc*de | cがないか、または1つ以上ある。「abde」,「abcde」,「abccde」などがマッチする |
0または1回の繰り返し | ? | abc?de | cがないか、または1つある。「abde」,「abcde」にマッチする |
いずれか | | | abc | xyz | abcまたはxyzのいずれかにマッチする |
preg_match
指定した文字列の中に、正規表現で指定したパターンが存在するか調べる時にはpreg_match関数。
preg_match関数は指定した文字列の中に正規表現で指定したパターンがあれば、戻り値として1を返し、なかったら0を返します。
なので、下記のコードのようにif文の条件式でうまく使うことが可能です。
<?php
// preg_match関数の使用例
$code = '123-4567';
// 郵便番号の形式が正しいかチェック
if(preg_match('/^[0-9]{3}\-[0-9]{4}/u', $code)){
echo '正しい郵便番号です。';
}else{
echo '間違った形式の郵便番号です。';
}
preg_replace
正規表現でマッチした文字列を置換したいときは、preg_replace関数を使います。
丸括弧()で囲まれた部分が順に${1},${2},${3}の参照番号に代入されます。
<?php
// 生年月日をハイフン区切りから〇〇〇〇年〇〇月〇〇日の形に置換する
$date = '2021-10-09';
$date = preg_replace('/([0-9]{4})\-([0-9]{2})\-([0-9]{2})/u', '${1}年${2}月${3}日', $date);
echo $date; // 結果:2021年10月09日と出力
preg_split
正規表現で区切り文字を指定して文字列を分割するには、preg_split関数を使います。
<?php
// 文字列を一つずつ分解する
$chars = preg_split('//u', 'Hello World', -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
// 文字列を改行で分解する
$message = <<< TEXT
preg_split関数の
実例を紹介しています。
参考にしてみて。
TEXT;
$lines = preg_split('/(\r\n|\r|\n)/',$message);
print_r($message);
preg_quote
正規表現として意味を持つ記号類を、バックスラッシュ記号()で一括してエスケープしたい時に使うのがpreg_quote関数です。
正規表現の特殊文字は、次のものです。 . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - #
第2引数にはエスケープ対象の文字を追加したい時に指定します。PCRE正規表現を使う場合には一般的に「/」を指定します。
バージョン7.2.0より第2引数のnullableが可能になり、7.3.0より#文字がクオートされるようになりました
バージョン | 説明 |
---|---|
7.3.0 | # 文字がクォートされるようになりました。 |
7.2.0 | delimiter(第2引数) は、nullable になりました。 |
<?php
$keywords = '$40 for a g3/400#';
$keywords = preg_quote($keywords, '/');
echo $keywords; // \$40 for a g3\/400\# を返します