Соскрести цену с сайта - PullRequest
0 голосов
/ 29 ноября 2008

Я пытаюсь вычеркнуть цену с веб-страницы, используя PHP и регулярные выражения. Цена будет в формате £ 123,12 или $ 123,12 (т. Е. В фунтах или долларах).

Я загружаю содержимое с помощью libcurl. Выход которого затем идет в preg_match_all. Так это выглядит примерно так:

$contents = curl_exec($curl);

preg_match_all('/(?:\$|£)[0-9]+(?:\.[0-9]{2})?/', $contents, $matches);

Пока все просто. Проблема в том, что PHP вообще ничего не соответствует - даже если на странице есть цены. Я сузил его до проблемы с символом «£» - PHP, похоже, не нравится.

Я думаю, что это может быть проблемой кодировки. Но что бы я ни делал, я не могу заставить PHP соответствовать этому! У кого-нибудь есть идеи?

(Edit: я должен отметить, если я пытаюсь использовать Regex Test Tool с использованием того же регулярного выражения и содержимого страницы, он отлично работает)

Ответы [ 3 ]

1 голос
/ 29 ноября 2008

Вы пытались использовать \ перед £

preg_match_all('/(\$|\£)[0-9]+(\.[0-9]{2})/', $contents, $matches);

Я пробовал это выражение с .Net с \ £, и оно работает. Я просто отредактировал его и удалил ":". alt text
(источник: clip2net.com )

Прочтите мой комментарий о возможности неправильного кодирования в Curl (комментарий к этому сообщению).

0 голосов
/ 29 ноября 2008

Это должно работать для простых значений.

'#(?:\$|\£|\€)(\d+(?:\.\d+)?)#'

Это не будет работать с разделителем тысяч, как 234 343 и 34 454,45.

0 голосов
/ 29 ноября 2008

может у фунта есть замена html-сущности? я думаю, что вы должны попробовать свое регулярное выражение с какой-нибудь программой коучинга (то есть сопоставить его с фиксированным текстом локально).

Я бы изменил свое регулярное выражение следующим образом: '/(?:\$|£)\d+(?:\.\d{2})?/'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...