dポイントプレゼントキャンペーン実施中!

正規表現 画像リンクのaltの取得

正規表現初心者です。
PHPでHTMLからリンクが設定された画像の alt とリンク先URLを取得するパターン作成に悪戦苦闘しています。

やりたいこと

ページ上の画像(<img>)のalt のテキストを取得する。
ただし<img>タグはアンカー<a></a>で囲まれたリンクが設定されているもののみ。
要はリンクURLとaltテキストの組み合わせリストを作成することを目的としています。

ためしたこと
検索(PHPのpreg_match_allで)以下のパターンで取得を試みました。

#<a\s[^>]*?href\s?=\s?[\"\'](.*?)[\"\'].*?><img\s[^>]*?alt\s?=\s?[\"\'](.*?)[\"\'][^>]*?>#i


このパターンで実行した場合.*?の指定があだとなったようで範囲が拡大され、たとえば以下のようなパターンにもヒットししまいます。

<a href="aaa">bbb</a><a href="ccc"><img alt="ddd"></img></a>

これだと URL "aaa" に対するaltテキストが"ddd"という結果がになってしまい事実との矛盾が生じます。

勉強不足で恐縮ですが、アドバイスいただければ幸いです。よろしくお願いします。

A 回答 (2件)

効率よさそうじゃないのでわたしも分けた方がいいとは思いますが、書くとしたらこんな感じでどうでしょう。



$s = '<a href="aaa">bbb</a><a href="ccc"><img alt="ddd"></a>';

preg_match_all('#<a\s[^><]*?\bhref=["\']?([^"\'\s><]*)[^><]*>(?:(?!</a>).)*<img\s[^><]*?\balt=["\']?([^"\'><]*)#is', $s, $match);

foreach ($match[1] as $key=>$value)
echo $value,": ",$match[2][$key],"<br />\n";
    • good
    • 0
この回答へのお礼

お忙しい中知恵を絞っていただきありがとうございます。
分けるほうで進めてみますが、こちらも試させていただきスピードの速いほうを採用させていただきます。

お礼日時:2010/11/09 01:23

「ど~しても 1つの正規表現で書きたい」というならともかく, そうでなければ


<a>~</a> を取り出し, それに対して再度マッチさせる
のが簡単じゃないかなぁ.
    • good
    • 0
この回答へのお礼

なるほど、素人なので逆に難しく考えておりました。
無理しないで分けたほうがよさそうですね。
アドバイスありがとうございます!

お礼日時:2010/11/09 01:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!