正規表現でhtml内のリンク名称とリンク先を取得

  • 4
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

とあるサイトの構成をエクセルに起こす必要があったので。
ページのソースをまるっと拾ってきてpaiza.io上で実行するという手抜きっぷり(/・ω・)/

注意

@mpyw さまにコメントいただきましたが、このパターンはa hrefというようにa要素の最初がhref属性である場合にしかマッチしないので、それ以外のパターンも想定される場合はコメント欄のコードをご活用くださいませ(^▽^)/
mpywさま ありがとうございました!

とりあえずコード

preg_match_all("|<a href=\"(.*?)\".*?>(.*?)</a>|mis",$str,$matches);

$matches[0]に該当部分
$matches[1]にhrefの中身
$matches[2]にリンク先名称
が、それぞれ配列で入ってきます。

サンプル

対象ページはQiita:Support
さすがに全部は多いので機能の部分だけ。

preg_match_all

//ソースは長いので割愛
$str = "ソース";

preg_match_all("|<a href=\"(.*?)\".*?>(.*?)</a>|mis",$str,$matches);

var_dump

var_dump($matches);

/*
array(3) {
  [0]=>
  array(10) {
    [0]=>
    string(50) "<a href="/ja/categories/qiita/features">機能</a>"
    [1]=>
    string(64) "<a href="/ja/articles/qiita-contribution">Contributionとは</a>"
    [2]=>
    string(69) "<a href="/ja/articles/qiita-emoji">絵文字の利用について</a>"
    [3]=>
    string(68) "<a href="/ja/articles/qiita-feed">フィード機能について</a>"
    [4]=>
    string(85) "<a href="/ja/articles/qiita-follow">タグやユーザーをフォローしよう</a>"
    [5]=>
    string(62) "<a href="/ja/articles/qiita-mention">メンション機能</a>"
    [6]=>
    string(90) "<a href="/ja/articles/qiita-search-options">検索時に利用できるオプション</a>"
    [7]=>
    string(119) "<a href="/ja/articles/qiita-stocks">素晴らしいコード、Tipsはどんどんストックして役立てよう</a>"
    [8]=>
    string(103) "<a href="/ja/articles/qiita-syntax-highlight">Qiitaのシンタックスハイライトについて</a>"
    [9]=>
    string(44) "<a href="/ja/articles/qiita">Qiitaとは</a>"
  }
  [1]=>
  array(10) {
    [0]=>
    string(29) "/ja/categories/qiita/features"
    [1]=>
    string(31) "/ja/articles/qiita-contribution"
    [2]=>
    string(24) "/ja/articles/qiita-emoji"
    [3]=>
    string(23) "/ja/articles/qiita-feed"
    [4]=>
    string(25) "/ja/articles/qiita-follow"
    [5]=>
    string(26) "/ja/articles/qiita-mention"
    [6]=>
    string(33) "/ja/articles/qiita-search-options"
    [7]=>
    string(25) "/ja/articles/qiita-stocks"
    [8]=>
    string(35) "/ja/articles/qiita-syntax-highlight"
    [9]=>
    string(18) "/ja/articles/qiita"
  }
  [2]=>
  array(10) {
    [0]=>
    string(6) "機能"
    [1]=>
    string(18) "Contributionとは"
    [2]=>
    string(30) "絵文字の利用について"
    [3]=>
    string(30) "フィード機能について"
    [4]=>
    string(45) "タグやユーザーをフォローしよう"
    [5]=>
    string(21) "メンション機能"
    [6]=>
    string(42) "検索時に利用できるオプション"
    [7]=>
    string(79) "素晴らしいコード、Tipsはどんどんストックして役立てよう"
    [8]=>
    string(53) "Qiitaのシンタックスハイライトについて"
    [9]=>
    string(11) "Qiitaとは"
  }
}
*/

リンク先だけ表示

echo "\nURL\n";
foreach ($matches[1] as $value) {
    echo $value."\n";
}
/*
URL
/ja/categories/qiita/features
/ja/articles/qiita-contribution
/ja/articles/qiita-emoji
/ja/articles/qiita-feed
/ja/articles/qiita-follow
/ja/articles/qiita-mention
/ja/articles/qiita-search-options
/ja/articles/qiita-stocks
/ja/articles/qiita-syntax-highlight
/ja/articles/qiita
*/

リンク名称だけ表示

echo "\nLink_name\n";
foreach ($matches[2] as $value) {
    echo $value."\n";
}
/*
Link_name
機能
Contributionとは
絵文字の利用について
フィード機能について
タグやユーザーをフォローしよう
メンション機能
検索時に利用できるオプション
素晴らしいコード、Tipsはどんどんストックして役立てよう
Qiitaのシンタックスハイライトについて
Qiitaとは
*/