PHP正则表达式仅在文本

时间:2018-06-14 15:33:59

标签: php regex pcre preg-match-all

这是我的第一个问题。 :) 几天来搜索我的问题,但还没有完全解决。 我所拥有的是一堆文字。有一些价格数据除以确切的短语" 提升后" 。所以这是我的RegEx:

'/price-([\d $гр€\.]*)/i'

它非常适用于所有价格,包括分割前的价格。但当我将其修改为:

'/promoted-after.*price-([\d $гр€\.]*)/is'

它正确绕过顶部,但只保存所有数据的最后一个价格。如何修改以正确保存所有价格后#34;促销 - "标签? 以下是输入示例:

price- 2680 $
a lot of some random html code here
price- 3250 $
a lot of some good html code here
price- 3450 $
promoted-after
price- 400 $
a lot of some strange html code here
price- 401 $
a lot of some awesome html code here
price- 402 $
a lot of some ugly html code here
price- 403 $
a lot of some nice html code here
price- 404 $
a lot of some best html code here

P.S。我使用preg_match_all

编辑:好的,让我们忽略它的HTML。让它成为纯文本。这项任务背后的整体逻辑构造应该是什么?

1 个答案:

答案 0 :(得分:1)

作为替代方案,您可以使用DOMDocumentDOMXPath并使用xpath表达式查找ID为promoted-after的div,然后找到所有兄弟p/strong。< / p>

您可以使用nodeValue获取其价值。

$dom = new DOMDocument();
$dom->loadHTML($data);
$xpath = new DOMXPath($dom);
$items = $xpath->query('//div[@id="promoted-after"]/following-sibling::p/strong');
foreach($items as $item) {
    echo $item->nodeValue . "<br>";
}

<强>结果

400 $
401 $
402 $
403 $
404 $

Demo