用于匹配img标签的开始和结束尖括号内的所有文本的正则表达式

时间:2013-04-16 10:44:00

标签: php regex

我想创建与开头内部的文本匹配的正则表达式,以及与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([^\/]+)\/>";

3 个答案:

答案 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)

使用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>';
    ?>