(正規表現) preg_matchによる使用例

正規表現を使ったpreg_matchの様々な使用例を掲載しています。

下記はページ内に存在するすべてのアンカーテキストを個別に抽出するサンプルです。

アンカータグも含めて抽出したい場合は「$anchortext[0]」で処理を行います。


$text = <<<FOD

<p>
  Panasonicの<a href="http://a1designer.net/">レッツノート</a>を断念し、<br />
  米沢生産の<a href="http://a1designer.net/">ThinkPad</a>を購入した。
</p>

FOD;
  
  // ページ内に存在するすべてのアンカーテキストをアンカータグごと抽出
  preg_match_all('#<a.*?>(.*?)</a>#sim', $text, $anchortext);
 
  // 配列内のキーと値を代入
  foreach ($anchortext[1] as $anchortext_key => $anchortext_value){
    
    // アンカーテキストを出力
    echo $anchortext_value."<br />\n";
  }
  
  /* 出力結果
  レッツノート
  ThinkPad
  */

下記はページ内に存在するすべてのアルファベット文字列を個別に抽出するサンプルです。


$text = "Panasonicのレッツノートをやめて、米沢生産のThinkPadを購入した。";
  
  // ページ内に存在するアルファベット文字列を個別に抽出
  preg_match_all("/[a-zA-Z]+/", $text, $alphabet);
  
  // 配列内のキーと値を代入
  foreach ($alphabet[0] as $alphabet_key => $alphabet_value){
    
    // 値を出力
    echo $alphabet_value."<br />\n";
  }
  
  /* 出力結果
  Panasonic
  ThinkPad
  */

下記はページ内に存在するすべてのカタカナ文字列を個別に抽出するサンプルです。


$text = "Panasonicのレッツノートをやめて、米沢生産のThinkPadを購入した。";
  
  // ページ内に存在するカタカナ文字列を個別に抽出
  preg_match_all("/[ァ-ヶーア-ン゙゚ァ-ォャ-ョー]+/u", $text, $katakana);
  
  // 配列内のキーと値を代入
  foreach ($katakana[0] as $katakana_key => $katakana_value){
    
    // 値を出力
    echo $katakana_value."<br />\n";
  }
  
  /* 出力結果
  レッツノート
  */

下記はページ内に存在するすべての漢字文字列を個別に抽出するサンプルです。


$text = "Panasonicのレッツノートをやめて、米沢生産のThinkPadを購入した。";
  
  // ページ内に存在するすべての漢字文字列を個別に抽出
  preg_match_all("/[\p{Han}]+/u", $text, $kanji);
  
  // 配列内のキーと値を代入
  foreach ($kanji[0] as $kanji_key => $kanji_value){
    
    // 値を出力
    echo $kanji_value."<br />\n";
  }
  
  /* 出力結果
  米沢生産
  購入
  */

下記はアンカータグ内のタイトルを正規表現で抽出するサンプルです。(title=”” の値のみを抽出)


$contentanchor = <<< AOF

<p>
  パナソニックの<a href="" title="レッツノート">レッツノート</a>を購入するつもりだったが、<br />
  悩んだ末、結局、ネット通販で米沢生産モデルの<a href="" title="ThinkPad">ThinkPad</a>を購入した。
</p>

AOF;

  //例 ページ内に存在するすべてのアンカータグ内のtitle属性値を抽出
  preg_match_all( '/<a\s[^><]*?\btitle=["\']?([^"\'><]*)/', $contentanchor, $match_title );
  
  foreach( $match_title[1] as $title_key => $title_value ){
    echo $title_value."<br />\n";
  }
  
  /* 結果
  レッツノート
  ThinkPad
        */

下記はイメージタグ内のオルトを正規表現で抽出するサンプルです。(alt=”” の値のみを抽出)


$contentimg = <<< BOF

<p>
  <img src="" alt="レッツノート" /><br />
  パナソニックのレッツノート。
  
  <img src="" alt="ThinkPad" /><br />
  先日、購入した米沢生産モデルのThinkPad。
</p>

BOF;
  
  // ページ内に存在するすべてのイメージタグ内のalt属性値を抽出し参照
  preg_match_all( '/<img\s[^><]*?\balt=["\']?([^"\'><]*)/', $contentimg, $match_alt );
  
  foreach( $match_alt[1] as $alt_key => $alt_value ){
    echo $alt_value."<br />\n";
  }
  
  /* 結果
  レッツノート
  ThinkPad
        */

正規表現には「絶対にこうじゃなきゃダメ・・・」みたいなものはなく、同様の抽出を実現するにしても何通りかの方法が存在します。

ここに掲載したサンプルをご参考派生させることで、さらに難易度の高い正規表現による抽出、処理を実現して頂けたら幸いです。