PHPを使用してHTMLからimg src、title、altを抽出する方法
このチュートリアルでは、PHPを使用してHTMLファイルからimg要素のsrc、title、alt属性を抽出する方法について説明します。
必要なもの
- PHP 5.4以上
- HTMLファイル
手順
- 正規表現の準備
以下の正規表現は、img要素とその属性を抽出するために使用されます。
$pattern = '/<img\s+([^>]*?)\s*>/i';
この正規表現は以下の意味を持ちます。
<img>
: img要素の開始タグ\s+
: 1つ以上の空白文字([^>]*?)
: 属性を含むimg要素の中身。?
は非貪欲マッチを指定>
: img要素の終了タグ/i
: 大文字と小文字を区別しない
- HTMLファイルの読み込み
file_get_contents
関数を使用してHTMLファイルの内容を読み込みます。
$html = file_get_contents('your_html_file.html');
preg_match_all
関数を使用して、正規表現をHTMLファイルの内容に適用し、img要素とその属性を取得します。
preg_match_all($pattern, $html, $matches);
$matches
変数には、img要素とその属性に関する情報を含む配列が格納されます。
- img src、title、alt属性の取得
$matches
変数から、img要素のsrc、title、alt属性を取得できます。
foreach ($matches[1] as $match) {
// src属性を取得
$src = preg_match('/src\s*=\s*"(.*?)"/i', $match, $src_matches);
if ($src_matches) {
echo 'src: ' . $src_matches[1] . '<br>';
}
// title属性を取得
$title = preg_match('/title\s*=\s*"(.*?)"/i', $match, $title_matches);
if ($title_matches) {
echo 'title: ' . $title_matches[1] . '<br>';
}
// alt属性を取得
$alt = preg_match('/alt\s*=\s*"(.*?)"/i', $match, $alt_matches);
if ($alt_matches) {
echo 'alt: ' . $alt_matches[1] . '<br>';
}
echo '<br>';
}
上記のコードは、img要素のsrc、title、alt属性をそれぞれ出力します。
- 上記のコードは基本的な例です。必要に応じて、コードを修正して拡張することができます。
<?php
// HTMLファイルを読み込む
$html = file_get_contents('your_html_file.html');
// 正規表現を準備
$pattern = '/<img\s+([^>]*?)\s*>/i';
// 正規表現を実行
preg_match_all($pattern, $html, $matches);
// img src、title、alt属性を取得
foreach ($matches[1] as $match) {
// src属性を取得
$src = preg_match('/src\s*=\s*"(.*?)"/i', $match, $src_matches);
if ($src_matches) {
echo 'src: ' . $src_matches[1] . '<br>';
}
// title属性を取得
$title = preg_match('/title\s*=\s*"(.*?)"/i', $match, $title_matches);
if ($title_matches) {
echo 'title: ' . $title_matches[1] . '<br>';
}
// alt属性を取得
$alt = preg_match('/alt\s*=\s*"(.*?)"/i', $match, $alt_matches);
if ($alt_matches) {
echo 'alt: ' . $alt_matches[1] . '<br>';
}
echo '<br>';
}
?>
- このコードは、上記の解説で説明した手順に基づいて、img要素のsrc、title、alt属性を抽出します。
your_html_file.html
を実際のHTMLファイル名に変更する必要があります。
実行方法
- コードをファイルに保存します。
- PHPを実行できる環境でファイルを 실행합니다。
- 出力を確認します。
出力例
src: https://example.com/image.jpg
title: This is an image
alt: This is an image of a cat
src: https://example.com/image2.jpg
title: This is another image
alt: This is an image of a dog
DOMDocumentクラスを使用してHTMLファイルを解析し、img要素とその属性を取得することができます。
$dom = new DOMDocument();
$dom->loadHTML($html);
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
echo 'src: ' . $image->getAttribute('src') . '<br>';
echo 'title: ' . $image->getAttribute('title') . '<br>';
echo 'alt: ' . $image->getAttribute('alt') . '<br>';
echo '<br>';
}
SimpleXMLを使用する
$xml = simplexml_load_string($html);
foreach ($xml->img as $image) {
echo 'src: ' . $image['src'] . '<br>';
echo 'title: ' . $image['title'] . '<br>';
echo 'alt: ' . $image['alt'] . '<br>';
echo '<br>';
}
HTMLParserを使用する
$parser = new HTMLParser($html);
while ($token = $parser->nextToken()) {
if ($token['type'] === HTMLParser::TOKEN_TAG && $token['name'] === 'img') {
echo 'src: ' . $token['attrs']['src'] . '<br>';
echo 'title: ' . $token['attrs']['title'] . '<br>';
echo 'alt: ' . $token['attrs']['alt'] . '<br>';
echo '<br>';
}
}
どの方法を使用するかは、状況によって異なります。
- DOMDocumentは最も柔軟な方法ですが、処理速度が遅くなる可能性があります。
- SimpleXMLは処理速度が速いですが、DOMDocumentほど柔軟ではありません。
- HTMLParserは処理速度が最も速いですが、他の方法よりも機能が限定されています。
php html regex