【问题标题】:php regex get text between html tagsphp regex 获取 html 标签之间的文本
【发布时间】:2017-02-28 14:26:14
【问题描述】:

我想从其他网站上删除有关产品的信息,并且保存价格的标签如下所示:

<span class="text10black">Price: <strong style="color:#000000;">15.90 $</strong></span>

在这种情况下,我只需要提取 15.90。 我试过这个:

$site_content = file_get_contents('url');
preg_match_all('#<span class="text10black">Price: <strong style="color:#000000;">(.*?) $</strong></span>#', $site_content, $product_prices);

“url”是我从中废弃产品的 url,但是当我使用 var_dump() 检查 $product_prices 变量时,它显示为 NULL

【问题讨论】:

  • 您应该很少使用正则表达式解析 HTML。请改用a PHP DOM parser
  • 除了@JayBlanchard 所说的之外,您还必须使用\$ 转义美元符号,因为它是一个匹配行尾的特殊正则表达式
  • 为什么不使用strip_tags。这将删除其中的 html 部分,然后您就可以使用它了
  • @Sphinx 但您仍然必须获取正确的 HTML 元素,否则标记的其余部分(例如,包括“价格:”)也将包括在内。

标签: php regex web-crawler


【解决方案1】:

使用简单的 Dom Parser http://simplehtmldom.sourceforge.net/ 似乎是做你需要的最好的主意。

$html = file_get_html($url);
foreach($html->find('.text10black strong') as $element)
    var_dump($element->plaintext);

【讨论】:

  • 使用外部库不是一个好习惯,而您可以在内部更明智地执行此操作:DOMDocument
  • 是的,@revo,你是对的。我建议使用 Simple DOM Parser,因为我发现它更易于使用。
  • 肯定是这样。浅显易懂,但非常复杂。
猜你喜欢
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多