我正在尝试使用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使用相同的正则表达式和页面内容,它可以正常工作)
答案 0 :(得分:1)
您是否尝试在£
前使用\preg_match_all('/(\$|\£)[0-9]+(\.[0-9]{2})/', $contents, $matches);
我用。£和。£尝试这个表达式并且它有效。我只是编辑了它并删除了一些“:”。
(来源:clip2net.com)
阅读我关于Curl给你编码错误的可能性的评论(这篇文章的评论)。
答案 1 :(得分:0)
也许pound有它的html实体替换?我认为你应该试试你的正则表达式(即在本地与固定文本匹配)。
我会像这样改变我的正则表达式:'/(?:\$|£)\d+(?:\.\d{2})?/'
答案 2 :(得分:0)
这应该适用于简单的值。
'#(?:\$|\£|\€)(\d+(?:\.\d+)?)#'
这对于像234,343和34,454.45这样的千位分隔符不起作用。