我得到这个正则表达式:
$val = "(123)(4)(56)";
$regex = "^(\((.*?)\))+$";
preg_match_all("/{$regex}/", $val, $matches);
谁能告诉我为什么这只匹配最后一个数字(56)而不是每组数字?
这是上面的正则表达式运行后 $matches 包含的内容:
array
0 =>
array
0 => string '(123)(4)(56)' (length=12)
1 =>
array
0 => string '(56)' (length=4)
2 =>
array
0 => string '56' (length=2)
因为@develroot已经回答了你想要使用的方式preg_match_all
不起作用,它只会返回最后一个匹配的组,而不是该组的所有捕获。这就是正则表达式的工作原理。目前我不知道如何在 PHP 中获取所有组的内容,我认为这是不可能的。可能不对,也可能会改变。
但是,您可以针对您的情况解决这个问题,首先检查整个字符串是否与您的(重复)模式匹配,然后按该模式提取匹配项。将所有内容都放在一个函数中,并且很容易访问(Demo http://codepad.viper-7.com/hYxVXw):
$tests = explode(',', '(123)(4)(56),(56),56');
$result = array_map('extract_numbers', $tests);
print_r(array_combine($tests, $result));
function extract_numbers($subject) {
$number = '\((.*?)\)';
$pattern = "~^({$number})+$~";
if (!preg_match($pattern, $subject)) return array();
$pattern = "~{$number}~";
$r = preg_match_all($pattern, $subject, $matches);
return $matches[1];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)