Php 从网站上削价

Php 从网站上削价,php,regex,character-encoding,Php,Regex,Character Encoding,我正在尝试使用PHP和正则表达式从网页中获取价格。价格为123.12英镑或123.12美元(即英镑或美元) 我正在使用libcurl加载内容。其输出随后进入preg\u match\u all。所以看起来有点像这样: $contents = curl_exec($curl); preg_match_all('/(?:\$|£)[0-9]+(?:\.[0-9]{2})?/', $contents, $matches); 到目前为止,一切都很简单。问题是,PHP根本不匹配任何东西——即使页面上有

我正在尝试使用PHP和正则表达式从网页中获取价格。价格为123.12英镑或123.12美元(即英镑或美元)

我正在使用libcurl加载内容。其输出随后进入
preg\u match\u all
。所以看起来有点像这样:

$contents = curl_exec($curl);

preg_match_all('/(?:\$|£)[0-9]+(?:\.[0-9]{2})?/', $contents, $matches);
到目前为止,一切都很简单。问题是,PHP根本不匹配任何东西——即使页面上有价格。我已经把范围缩小到了“£”字符的问题——PHP似乎不喜欢它

我认为这可能是一个字符集问题。但无论我做什么,我似乎都无法让PHP与之匹配!有人有什么想法吗


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

您尝试过在前面使用\吗

preg_match_all('/(\$|\£)[0-9]+(\.[0-9]{2})/', $contents, $matches);
我在.Net中用\尝试过这个表达式,它很有效。我刚刚编辑了它并删除了一些“:”。
(来源:)


阅读我关于Curl可能给你带来糟糕编码的评论(这篇文章的评论)。

pound可能有它的html实体替换?我认为您应该使用某种couching程序来尝试您的regexp(即,将其与本地固定文本进行匹配)


我会像这样更改我的regexp:
'/(?:\$\124;)\ d+(?:\.\d{2})?/'

这应该适用于简单的值

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

这对234343和34454.45这样的千位分隔符不起作用。

我编辑了正则表达式,并删除了一些其他内容。检查屏幕截图。你确定这不是你在正则表达式之后使用匹配的方式吗?我刚刚注意到你的编辑。如果正则表达式工作正常,那么可能是来自curl的页面编码导致了$and的一些编码问题。您可能希望输出curl数据以进行检查。是的,事实证明curl给出了编码ISO-8859-1,这显然是PHP不喜欢的。转换为UTF-8似乎可以。谢谢-我尝试在本地保存它,但在打开文件时出现了一个错误。如果我将字符串转换为utf8,它会工作!所以我想我只需要检测字符集。