2

我想创建正则表达式,以匹配开头内的文本及其匹配的 html img 标记与 PHP 的右尖括号。假设我在变量 $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([^\/]+)\/>";
4

3 回答 3

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'
于 2013-04-16T10:50:31.490 回答
2

尝试:

preg_match_all("`<img (.*)/>`Uis", $searchThis, $results);
print_r($results);

打印结构$results将向您显示其内容。

注意:如果您希望更准确,我建议您src=在搜索中包含并一直到结束引号,以便仅选择图像地址。然后您可以在之后添加缺少的文本 ( src=)。
这样,即使您的图像标签看起来不像预期的那样,您仍然可以获得相对路径(即标签中还有其他内容,例如alt="Smiley face" height="42" width="42")。

于 2013-04-16T10:47:50.153 回答
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>';
    ?>
于 2013-04-16T10:54:42.280 回答