如何完全匹配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网站上发现了数组部分:
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];
使用我的代码,如何获取图片网址和alt标记?
谢谢!
答案 0 :(得分:1)
对于原始问题,请使用preg_match_all()
函数获取所有匹配项。
对于第二个问题(“使用我的代码,如何获取图像URL和alt标记?”),基本上你的正则表达式是正确的。不过,我建议首先获取整个<img>
代码,然后再执行preg_match()
来获取href
和alt
属性,因为它们的顺序可能会有所不同。
$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=
之后的部分。
我更新了上面的来源并评论了“更新”。
答案 1 :(得分: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
)
)*/