preg_match 或 preg_replace 仅从 html 代码中获取数字

preg_match or preg_replace to get only number from html code

我很难从 html 代码的特定部分获取数字,我正在解析一页,内容输出如下所示。

<div class="priceitem"> 1,098&nbsp;USD <span id="XUwt-price-mb-aE068a15dcca8E168a15dcca8-tooltipIcon" class="tooltip-icon afterPrice info-icon"> <svg class="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="100%" height="100%"><use xlink:href="#common-icon-icon-info"></use></svg> </span> <br></div>

我正在使用简单的htmldom 来获取内容,因此 priceitem 中的所有内容都会得到输出。我可以以某种方式使用 preg_match 来匹配模式或 preg_replace 来获得像 1,098.

这样的价格数字吗

价格可能会改变,所以有时它只会 29 usd 输出 29&nbsp;USD,有时价格可以是 305&nbsp;USD,但超过 1k 它将有逗号,我没有'真的不需要。

这是我对一切的尝试:

foreach($html->find('div.priceitem') as $element) {
    $pricenum = preg_match("/([^\s]+)/","", $element->innertext);
    echo $pricenum;
}

这是一个可以让您获得所有可能价格的模式:

(\d{1,3}(?:,\d{1,3})*)+(?=&nbsp;USD)

想法是,数字以 1-3 位数字为一组,允许以逗号开头的组,但在常规块之后不需要。 &nbsp;USD作为主播。

Online sample

但是,如果您只对整数部分感兴趣,删除逗号仍然是最佳选择:str_replace(',', '' , $string);

对于 int 值,删除逗号更有意义,然后对于 /\d+/

preg_match