本記事ではPHPで正規表現を使う方法について解説します。
正規表現を使うことで特定パターンに合致する文字列を抽出したり置換したりすることが可能です。
正規表現は便利ですのでぜひこの機会に覚えてください。
正規表現とは?
正規表現とは、文字列のパターンを表現する方法のことです。
正規表現を使うことで、文字列に特定の文字が入っているかチェックしたり、電話番号や住所などが形式に基づいているか調べたりすることができます。
正規表現では「メタ文字」と呼ばれる文字列のパターンを表す特殊な文字を使います。
メタ文字の例を挙げると、次のようなものがあります。
- . ⇒ 任意の文字1つ
- * ⇒ 直前の文字を0回以上繰り返す
- + ⇒ 直前の文字を1回以上繰り返す
- [~] ⇒ ~のいずれか1文字
- ^ ⇒ 行頭
- $ ⇒ 末尾
これ以外にも多くのメタ文字があり、これらを組み合わせることで文字列のパターンを表現するのが正規表現の基本です。
メタ文字について詳しく知りたい方は、PHP公式サイトを参考にしてください。
正規表現で文字列をチェックする方法
正規表現で文字列をチェックする方法について解説します。
今回は初心者向けに正規表現のもっとも基本的な使い方を説明しましょう。
次の3つの手順に従って解説していきます。
- 数値が含まれているかチェックする
- 特定文字が含まれているかチェックする
- 繰り返し存在するかをチェックする
- 冒頭か末尾かをチェックする
なお、正規表現を使う方法以外の文字列のチェック・置換方法について知りたい方は、PHP基本編6:PHPで文字列置換を行う方法とは?正規表現を使うやり方も解説!を参考にしてください。
1)数値が含まれているかチェックする
まず、正規表現によって数値が含まれているかチェックする方法をみていきましょう。
○コード例
<?php
$text = "1aa";
preg_match("/[0-9]/",$text, $match);
echo $match[0];
?>
○実行結果
preg_match関数は第1引数に正規表現、第2引数に文字列を指定することで、その文字列がパターンに合致しているかチェックすることが可能です。
パターンに合致している場合、第3引数の変数に合致した文字列が配列として格納されます。
上記のコードでは、文字列に[0-9]が含まれているかを判定しています。
[0-9]と記載することで、0から9までの数値いずれかが含まれているかをチェックすることが可能です。
「1aa」には「1」が含まれているので、上記では合致していることになります。
○コード例
<?php
$text = "1aa";
preg_match("/[2-9]/",$text, $match);
echo $match[0];
?>
○実行結果
上記では[2-9]と記載されており、2から9までの数値いずれかが含まれているかをチェックしています。
「1aa」は2以上の数値は含まれていないため、上記では合致していないことになります。
合致していない場合、$match配列には何も入りません。
2)特定文字が含まれているかチェックする
続いて、特定文字が含まれているかをチェックする方法を解説します。
○コード例
<?php
$text = "ahufre";
preg_match("/[abcd]/",$text, $match);
echo $match[0]."\n";
?>
○実行結果
上記のコードでは[abcd]によって「a」「b」「c」「d」いずれかの文字が含まれているかをチェックしています。
「ahufre」には「a」が含まれているので、パターンに合致していることになります。
○コード例
<?php
$text = "ahufre";
preg_match("/[a-z]/",$text, $match);
echo $match[0]."\n";
?>
○実行結果
上記では[a-z]によって「a」から「z」までのアルファベットのいずれかが含まれているかをチェックしています。
この場合でもやはりパターンに合致しています。
3)繰り返し存在するかをチェックする
特定の文字や数値が繰り返し存在するかをチェックする方法を解説します。
まず、特定のものが0個以上あるかをチェックする方法です。
○コード例
<?php
$text = "hello";
preg_match("/hel*o/",$text, $match);
echo $match[0]."\n";
$text = "heo";
preg_match("/hel*o/",$text, $match);
echo $match[0]."\n";
?>
○実行結果
上記では、「*」というメタ文字が使われています。
「*」は「直前の文字が0個以上含まれている」を意味します。
「hello」にも「heo」にも「l」が0個以上含まれているため、どちらもパターンに合致していることになります。
続いて、特定のものが1個以上あるかをチェックする方法です。
○コード例
<?php
$text = "hello";
preg_match("/hel+o/",$text, $match);
echo $match[0]."\n";
$text = "heo";
preg_match("/hel+o/",$text, $match);
echo $match[0]."\n";
?>
○実行結果
「+」は「直前の文字が1個以上含まれている」を意味します。
「hel」には「l」が1個以上含まれていますが、「heo」には含まれていないため、前者のみパターンに合致していることになります。
4)冒頭か末尾かをチェックする
最後に、その文字が冒頭か末尾かをチェックする方法をみていきましょう。
まずは、その文字が冒頭かをチェックする方法についてです。
○コード例
<?php
$text = "hello";
preg_match("/^hello/",$text, $match);
echo $match[0]."\n";
$text = "1hello";
preg_match("/^hello/",$text, $match);
echo $match[0]."\n";
?>
○実行結果
「^」は「直後の文字が文字列の冒頭にある」を意味するメタ文字です。
「hello」の「h」は文字列の冒頭にあるためパターンに合致しています。
「1hello」の「h」は冒頭ではないため合致していません。
続いて、その文字が末尾かをチェックする方法についてです。
○コード例
<?php
$text = "hello";
preg_match("/hello$/",$text, $match);
echo $match[0]."\n";
$text = "hello1";
preg_match("/hello$/",$text, $match);
echo $match[0]."\n";
?>
○実行結果
「$」は「直前の文字が文字列の末尾にある」を意味するメタ文字です。
「hello」の「o」は文字列の末尾にあるためパターンに合致しています。
「hello1」の「o」は末尾ではないため合致していません。
まとめ
本記事ではPHPで正規表現を使う方法について解説しました。
正規表現は奥が深いですが、使いこなせるようになると非常に便利なものです。
少しずつ正規表現の使い方を覚えていくようにしましょう。