从网站上刮掉一个价格

问题描述 投票:0回答:3

我正在尝试使用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似乎不喜欢它。

我认为这可能是一个charset问题。但无论我做什么,我似乎无法让PHP匹配它!有人有主意吗?

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

php regex character-encoding
3个回答
1
投票

你试过在£面前使用\吗?

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

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

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


0
投票

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

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


0
投票

这应该适用于简单的值。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.