我想创建与开头内部的文本匹配的正则表达式,以及与PHP匹配的html img标记的右括号。假设我在变量$ searchThis
中有html文本$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([^\/]+)\/>";
答案 0 :(得分:2)
<强>尝试:强>
preg_match_all("`<img (.*)/>`Uis", $searchThis, $results);
print_r($results);
打印$results
的结构会显示其内容。
注意:如果您希望更准确,我建议您在搜索中加入src=
,直到结束引号,以便只选择图片地址。然后,您可以在之后添加缺少的文本(src=
)。
这样,即使你的图片标签看起来不像预期的那样,你仍然可以获得相对路径(即标签中还有其他东西,如alt="Smiley face" height="42" width="42"
)。
答案 1 :(得分:2)
永远不要尝试使用正则表达式解析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'
答案 2 :(得分:0)
<?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>';
?>