从网站上刮掉一个价格

时间:2008-11-29 15:28:29

标签: php regex character-encoding

我正在尝试使用PHP和Regexes从网页中榨取价格。价格为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匹配它!有人有什么想法吗?

(编辑:我应该注意,如果我尝试使用Regex Test Tool使用相同的正则表达式和页面内容,它可以正常工作)

3 个答案:

答案 0 :(得分:1)

您是否尝试在£

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

我用。£和。£尝试这个表达式并且它有效。我只是编辑了它并删除了一些“:”。 alt text
(来源:clip2net.com

阅读我关于Curl给你编码错误的可能性的评论(这篇文章的评论)。

答案 1 :(得分:0)

也许pound有它的html实体替换?我认为你应该试试你的正则表达式(即在本地与固定文本匹配)。

我会像这样改变我的正则表达式:'/(?:\$|£)\d+(?:\.\d{2})?/'

答案 2 :(得分:0)

这应该适用于简单的值。

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

这对于像234,343和34,454.45这样的千位分隔符不起作用。