0

可能重复:
正则表达式匹配打开的标签,XHTML 自包含标签除外
如何使用 PHP 解析和处理 HTML/XML?

我有一个当前代码行作为图像下载脚本的一部分,如下所示:

preg_match_all('|<img.*?src=[\'"](.*?)[\'"].*?>|i', $content, $matches);

我需要将其更改为包括:

id="iwi"

在 preg_match_all 命令中。img 始终采用以下格式:

我尝试了一些不同的变体,但遇到了错误,最后尝试了没有像下面这样的引号,但仍然没有,我的语法错了吗?

preg_match_all('|<img.*?id=iwi.*?src=[\'"](.*?)[\'"].*?>|i', $content, $matches);
4

2 回答 2

4

这是The Pony He Comes的第一个问题。你不知道它会是<img id="iwi" src="image.png" />,还是<img src="image.png" id="iwi" />

相反,您应该使用解析器:

$dom = new DOMDocument();
$dom->loadHTML($content);
$img = $dom->getElementById("iwi");
$src = $img->getAttribute("src");
于 2013-01-20T01:54:40.027 回答
1

如果您不顾所有反对意见而坚持使用 preg,这些方法也有效;

// [\'"]* is useful cos sometime can't find " or ', and * means 0 or 1 time search
preg_match_all('~<img.*?id=[\'"]*([^\s\'"]*).*?src=[\'"]*([^\s\'"]*).*?>~i', $content, $matches);
preg_match_all('~<img.*?id=[\'"]*(?P<id>[^\s\'"]*).*?src=[\'"]*(?P<src>[^\s\'"]*).*?>~i', $content, $matches);
print_r($matches);
于 2013-01-20T02:51:40.437 回答