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


Regex for matching all text inside opening and closing angle brackets of img tag

我想创建一个正则表达式,匹配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>';
    ?>