0

我正在尝试使用 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 匹配它!有人有想法么?

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

4

3 回答 3

1

你有没有尝试在£前面使用\

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

我已经用 .Net 和 \£ 尝试过这个表达式,它可以工作。我刚刚对其进行了编辑并删除了一些“:”。 (来源:clip2net.com替代文字

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

于 2008-11-29T15:32:00.580 回答
0

也许磅有它的html实体替换?我认为您应该使用某种沙发程序尝试您的正则表达式(即,将其与本地固定文本匹配)。

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

于 2008-11-29T15:37:09.210 回答
0

这应该适用于简单的值。

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

这不适用于千位分隔符,如 234,343 和 34,454.45。

于 2008-11-29T15:41:28.390 回答