プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、正規表現でパターンマッチした文字列を全て抽出する
結論から書くと、preg_match_all()関数を使って

preg_match_all(【パターン】, 【対象文字列】, 【結果配列】);

のように書けばOKです。

それでは詳細を……というほど書くことも無いので、サンプルですφ(--)

<?php

//対象文字列
$target = <<<EOT
<html>
<head></head>
<body>
    <p>ああああ</p>
    <p>いいい</p>
    <p>ううう</p>
</body>
</html>
EOT;

//パターン
$pattern= '/<p>(.*)<\/p>/';

//パターンマッチ&抽出
preg_match_all($pattern, $target, $result);

//結果表示
var_dump($result);
?>

実行結果は、こんな感じになりますφ(--)

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(15) "<p>ああああ</p>"
    [1]=>
    string(13) "<p>いいい</p>"
    [2]=>
    string(13) "<p>ううう</p>"
  }
  [1]=>
  array(3) {
    [0]=>
    string(8) "ああああ"
    [1]=>
    string(6) "いいい"
    [2]=>
    string(6) "ううう"
  }
}

「<p>~</p>」にマッチした要素がすべて抽出されていますね。

ちなみに、preg_match_all()ではなくpreg_match()を使うと、
最初にマッチしたもののみ返却されます。

例えば、こんなコードを実行するとφ(--)

<?php

//対象文字列
$target = <<<EOT
<html>
<head></head>
<body>
    <p>ああああ</p>
    <p>いいい</p>
    <p>ううう</p>
</body>
</html>
EOT;

//パターン
$pattern= '/<p>(.*)<\/p>/';

//パターンマッチ&抽出
//preg_match_all($pattern, $target, $result);
preg_match
($pattern, $target, $result);

//結果表示
var_dump($result);
?>

こんな結果になりますφ(--)

array(2) {
  [0]=>
  string(15) "<p>ああああ</p>"
  [1]=>
  string(8) "ああああ"
}

今度は、最初にマッチしたもののみ抽出されていますね。

マッチしたものを全部抽出するのは「preg_match()」ではなく「preg_match_all()」です。
覚えておいてください。

そうしないと、私みたいに5分くらいあれこれ悩む羽目になります(-A-)

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事