0

我有一个 preg_match_all 模式来只捕捉带有货币符号的数字,或者如果没有符号,只捕捉数字。但是,除了 $ 符号(不包括符号)之外的任何东西都会失败(不返回任何错误)。

这是我正在尝试的:

include 'simple_html_dom.php';

$html = file_get_html($url);

// Find price if added our code
$ret = $html->find('.price');

$pattern = '/\p{Sc}\s*\d{1,3}(?:,\d{3})*(?:\.\d+)?/u';

以下是 simple_html_dom 可能返回的示例以及它们是否有效 - 它可能是以下之一

$ret[0] = '<span class="price">100</span>'; // this returns null

$ret[0] = '<span class="price">£100</span>'; // this returns null

$ret[0] = '<span class="price">€100</span>'; // this returns null

$ret[0] = '<span class="price">$100</span>'; // this works correctly and returns $100

preg_match_all($pattern, $ret[0], $matches);

echo $matches[0][0];

任何想法为什么?

4

1 回答 1

0

在您的代码中,您正在替换$retvar,而不是将字符串放入数组中,因此正则表达式匹配将仅在最后一个字符串上执行。如果您发布的是您的代码,那么您应该创建$ret一个数组并添加字符串。就正则表达式而言,这里一切似乎都很好!

编辑:
我现在看到的问题是您将所有内容添加到$ret[0],您应该添加到$ret[0]第一个,$ret[1]第二个等等,或者使用$ret[]=

于 2012-11-30T08:42:15.837 回答