LoginSignup
8
9

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-04-21

とあるサイトの構成をエクセルに起こす必要があったので。
ページのソースをまるっと拾ってきて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とは
*/
8
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9