Preg_match_all失败

时间:2012-11-30 08:34:46

标签: php regex preg-match-all

我有一个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];

任何想法为什么?

1 个答案:

答案 0 :(得分:0)

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

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