LoginSignup
1
0

More than 1 year has passed since last update.

PHP -正規表現に関する関数-

Posted at

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\# を返します
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0