【发布时间】:2013-02-25 19:00:33
【问题描述】:
我已经尝试使用preg_match_all 30 分钟,但看起来我做不到。
基本上我有一个$var,其中包含一串 HTML 代码。例如:
<br>iihfuhuf
<img title="Image: http://www.jlnv2.local/temp/temp513caca536fcd.jpeg"
src="http://www.jlnv2.local/temp/temp513caca536fcd.jpeg">
<img src="http://www.jlnv2.local/temp/temp513caca73b8da.jpeg"><br>
我想获取img 标记的src 属性值,这些标记的src 值中包含/temp/temp[a-z0-9]{13}\.jpeg。
这是我目前所拥有的:
preg_match_all('!(<img.*src=".*/temp/temp[a-z0-9]{13}\.jpeg"(.*alt=".*")?>)!', $content, $matches);
【问题讨论】:
-
你尝试了 30 分钟......你想出了什么,什么没用?
-
preg_match_all('!!', $content, $matches);我只是不太明白 preg_match_all 是如何工作的。我可以制作模式,但不能让 preg_match_all 像我期望的那样工作。
-
@MarcDupuis 您应该为此使用 DOM 和 XPath,而不是(仅)正则表达式。将 HTML 加载到
<img>标记的<img>和 XPath 中,其中src包含/temp/temp,您可以轻松地迭代匹配的节点并使用正则表达式来提取您需要的数据。您甚至可以使用 XPath 注册 PHP 函数,以便直接在 XPath 查询中使用您的正则表达式。 -
不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用 PHP 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/php.html。
-
感谢您的建议,但代码是从所见即所得编辑器生成的,我只需要在将图像保存到数据库之前替换图像的 src。所以代码将永远是我所期望的。不过,感谢您让我了解 DOMDocument。
标签: php regex html-parsing preg-match-all