【PHP】preg_match関数を使って複数の値を配列に入れる方法

公開日:
更新日:
カテゴリー: PHP

preg_match関数で正規表現を利用して、(グループ化された)複数の値を配列に入れる方法を紹介します。

preg_match関数

preg_match関数は、正規表現を使ってマッチングおよびマッチしたデータを取得できる関数です。

preg_match(pattern, subject, matches, flags, offset)

「pattern」では正規表現を利用でき、そのパターンに該当するものが「subject」に存在するか確認します。

パターンとマッチしたものがあれば「1」を、マッチしない場合は「0」を返します(エラーが発生した場合は「false」を返す)。

第3引数以降は任意で設定します。詳しくはこちらを参照してください。

使用例

<?php

//マッチング対象の文字列
$string = "かきく☆けこさ□しすせそ";

//パターンとマッチする部分をpreg_matchで抽出
preg_match( "/☆(.*?)□/", $string, $matches);

//matches[0]の場合、パターン部分(☆と□を含めた文字列)が抜き出される
echo $matches[0];

//matches[1]の場合、「(」と「)」に囲まれた部分のみ抜き出される
echo $matches[1];

?>

このプログラムを実行すると、結果はこのようになります。

☆けこさ□
けこさ

複数の値を配列に入れる

単純な例として、「#」から始まる4つの数字で構成されている文字列から、それぞれの数字を取り出してみたいと思います。

例:#0123

この場合、以下のプログラムで取得可能です。

<?php

//マッチングさせる文字列
$string = "#0123";

//preg_match関数でマッチングし、マッチしたものを配列「$matches」に格納する
preg_match("/#([0-9])([0-9])([0-9])([0-9])/", $string, $matches);

//配列の中身を確認
print_r($matches);

?>

結果はこのようになります。

Array
(
    [0] => #0123
    [1] => 0
    [2] => 1
    [3] => 2
    [4] => 3
)

すなわち、「#」から始まる4つの数字で構成される文字列から3つ目の数字(上の例だと「2」)を出力したい場合、次のようにします。

echo $matches[3];

これで、「#0123」の「2」が出力されます。

解説

配列「$matches」に格納したい値(正規表現を使って取り出したい値)を「(」と「)」で囲みます(複数可)。

「[0-9]」は、0~9までのどれかの数字1文字を表します。

 

頑張って書いたのでちょろっと読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント