preg_match или preg_replace, чтобы получить только номер из HTML-кода - PullRequest
0 голосов
/ 28 ноября 2018

У меня небольшая проблема, чтобы получить только число из определенной части 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>

Я использую simplehtmldom для получения содержимого,так что все внутри 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;
}

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Для значений int имеет смысл удалить запятые, а затем preg_match для / \ d + /

0 голосов
/ 28 ноября 2018

Вот шаблон, который должен получить все возможные цены:

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

Идея состоит в том, что числа в блоках по 1-3 цифры, группы с начальной запятой разрешены, но не обязательны послеобычный блок.&nbsp;USD является привязкой.

Пример в сети

Однако, если вас интересует только целочисленная часть, удаление запятой по-прежнему является лучшим вариантом: str_replace(',', '' , $string);

...