我有一个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];
任何想法为什么?
答案 0 :(得分:0)
在您的代码中,您正在替换$ret
var,而不是将字符串放入数组中,因此正则表达式匹配将仅在最后一个字符串上执行。如果您发布的是您的代码,那么您应该使$ret
成为一个数组并添加字符串。 Here在正则表达式方面,一切似乎都很好!!
编辑:
我现在看到的问题是你要将所有内容添加到$ret[0]
,你应该添加到$ret[0]
第一个,$ret[1]
第二个,依此类推,或者使用$ret[]=