2012-11-30 60 views
0

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

ONE任何想法为什么?

+1

你似乎是使用DOM解析器......为什么以后使用正则表达式来解析HTML? –

回答

0

在您的代码中,您将替换$ret var,不会将字符串放入数组中,因此只会在最后一个字符串上执行正则表达式匹配。如果您发布的是您的代码,那么您应该制作$ret数组并添加字符串。 Here一切似乎都正常工作正则表达式!

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

+0

更新的问题与实际代码 –

+0

如果这是您的实际代码,请检查我的更新答案。相反,如果您正在正确地管理阵列,我不知道 – Gabber

+0

已添加更多代码 –