PG WORKS

PHPやLinuxサーバなどのノウハウや、便利なツールを紹介していきます。

【PHP】preg_match_allを使った正規表現の書き方

PHP正規表現を使うとき、「preg_match_all」をよく使います。
今回は、「preg_match_all」を使ったサンプルを記載していきたいと思います。

正規表現サンプル

<?php
  $buf = '<a href="sample.com"></a>';
  $ptn = "/href=\"(.*)\"/i";
  preg_match_all($ptn, $buf, $aryDatas);
  print_r($aryDatas);
?>

正規表現サンプルの実行結果

f:id:zen6a:20150909224551p:plain

「$aryDatas」配列の中に、正規表現で指定した内容が出力されます。「(.*)」で指定した部分は、配列番号の1番目「$aryDatas[1][0]」に格納されます。また、特定のタグ要素部分の値を取得したいときは、「(.*)」または「(.*?)」で取得できます。

「$buf」の要素が改行されているときは、上記の方法で取得ができないため、下記の方法で取得します。

正規表現サンプル(複数行のAタグを取得)

<?php
  $buf = '<a href="sample.com"></a>
  <br >
  <a href="sample2.com"></a>
  
  <a href="sample3.com"></a>';
  $ptn = "/href=\"(.*?)\"/is";
  preg_match_all($ptn, $buf, $aryDatas);
  print_r($aryDatas);
?>

正規表現サンプルの実行結果(複数行のAタグを取得)

f:id:zen6a:20150909225727p:plain

複数行のデータがある場合、正規表現の書き方を「$ptn = "/href=\"(.*?)\"/is";」に変更すると、取得が可能になります。