我想创建一个正则表达式,匹配html img标签的打开和关闭尖括号内的文本与PHP。比如我把html文本放在变量$searchThis
中$searchThis = "<html><div></div><img src='/relative/path/img1.png'/></div>
<img src='/relative/path/img2.png'/><div></div></div>
<img src='/relative/path/img3.png'/><ul><li></li></ul></html>";
我想匹配标记中的内容,省略号是替代的。结果必须是以下匹配:
src='/relative/path/img1.png'
src='/relative/path/img2.png'
src='/relative/path/img3.png'
这是我想象的模式应该是什么样子,实际上不适合我:
$pattern = "<img([^'/]+)'/>";
永远不要尝试用regex解析HTML。解析HTML使用DOM Parser。考虑这样的代码:
$html = <<< EOF
<html><div></div><img src='/relative/path/img1.png'/></div>
<img src='/relative/path/img2.png'/><div></div></div>
<img src='/relative/path/img3.png'/><ul><li></li></ul></html>
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query("//img");
for($i=0; $i < $nodelist->length; $i++) {
$node = $nodelist->item($i);
$src = $node->attributes->getNamedItem('src')->nodeValue;
echo "src='$src''n";
}
输出:src='/relative/path/img1.png'
src='/relative/path/img2.png'
src='/relative/path/img3.png'
Try:
preg_match_all("`<img (.*)/>`Uis", $searchThis, $results);
print_r($results);
打印$results
的结构将显示其内容。
注意:如果你想更准确,我建议你在搜索中包括src=
,直到结束引号,以便只选择图像地址。然后你可以添加缺失的文本(src=
)之后。
这样,你仍然得到相对路径,即使你的图像标签看起来不像预期的(即有其他的东西在标签,如alt="Smiley face" height="42" width="42"
)。
使用simplehtmldom解析示例
<?php
include("simplehtmldom/simple_html_dom.php");
// Create DOM from URL or file
$html = str_get_html("<html><div></div><img src='/relative/path/img1.png'/></div>
<img src='/relative/path/img2.png'/><div></div></div>
<img src='/relative/path/img3.png'/><ul><li></li></ul></html>");
// Find all images
foreach($html->find('img') as $element)
echo $element->src . '<br>';
?>