1

img タグの複数のインスタンスを正確に一致させるにはどうすればよいですか? preg_match に関するいくつかのチュートリアルを読みましたが、完全には理解できませんでした。

私はこれを私のベースとして持っています:

<img src="http://example.com/1.png" alt="Example" />

<img class="Class" src="http://example.com/2.jpg" alt="Example 2" />

そして、私は正規表現のような小さなものを作りました:

<img (src="|class="Class" src=")http://.+\.(?:jpe?g|png)" alt="

この後、行き詰まりました。両方の文字列の最後まですべてを一致させるにはどうすればよいですか?

PHP Webサイト自体で配列部分について知りました:

preg_match('@^(?:http://)?([^/]+)@i',
    "http://www.php.net/index.html", $matches);
$host = $matches[1];

コードを使用して、画像の URL と alt タグを取得するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

1

元の質問では、preg_match_all()関数を使用してすべての一致を取得します。

2 番目の質問 (「私のコードを使用して、画像の URL と alt タグを取得するにはどうすればよいですか?」) については、基本的にあなたの正規表現は正しいです。ただし、順序が異なる可能性があるため、<img>最初にタグ全体を取得してから、別のタグと属性preg_match()を取得することをお勧めします。hrefalt

$html = "<img src='test.jpg' alt='aaaaaaaaaaa!'>  adfa <img src='test2.jpg' alt='aaaaaaaaaaa2'>  ";

$pattern = '/<img\s[^>]*>/';
$count = preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);

echo "Found: " . $count . "\n";
if ($count > 0) {
    foreach ($matches as $match) {
        $img = $match[0];
        echo "img: " . $img . "\n";
        if (preg_match("/src=['\"]([^'\"]*)['\"]/", $img, $val)) {  # UPDATE: use () to catch the content of src
            $src = $val[1];      # UPDATE: get the part in ()
        }
        if (preg_match("/alt=['\"]([^'\"]*)['\"]/", $img, $val)) {   # UPDATE
            $alt = $val[1];      # UPDATE
        }

        echo "src = " . $src . ", alt = " . $alt . "\n";
    }
}

アップデート

あなたのコメントに答えてください。もちろん。グループを使用して の後の部分をキャッチするだけsrc=です。上記のソースを更新し、「UPDATE」とコメントしました。

于 2012-10-02T06:35:23.307 に答える
1

なぜDOMDocumentですか?画像の書き方に関係なく、すべての属性を取得できます。

$string = '<img class="Class" src="http://example.com/2.jpg" alt="Example 2" />';

$dom = new DOMDocument;
$dom->loadHTML($string);
$xpath = new DOMXPath($dom);

$query = '//img';
$elements = $xpath->query($query);

$attributes = array();
$i = 0;
foreach($elements as $one){
    foreach($one->attributes as $att){
        $attributes[$i][$att->nodeName] = $att->nodeValue;
    }
    $i++;
}
print_r($attributes);

/*Array
(
    [0] => Array
        (
            [class] => Class
            [src] => http://example.com/2.jpg
            [alt] => Example 2
        )

)*/
于 2012-10-02T06:35:25.543 に答える