如何使用preg_match_all只括括号内的数字

时间:2012-12-03 22:16:02

标签: php preg-match

我希望通过以下内容获得preg_match_all

[['p0',-1,[1,5,6,7,9,10],[['Text','ACER'],['Value','19'],['NavigateUrl','m-19-acer.aspx'],['Look-RightIconUrl','arrow.gif'],['Look-RightIconWidth','15']]] 

仅括号内的数字。那是1,5,6,7,9,10或:

['p1',0,[2,3,4],[['Text','NOTEBOOK'],['Value','87'],['NavigateUrl','m-87-notebook.aspx'],['Look-RightIconUrl','arrow.gif'],['Look-RightIconWidth','15']]],['p2',1,[],[['Text','MONITOR >11"'],['Value','125'],['NavigateUrl','m-125-monitor-11.aspx']]],

即:2,3,4

我使用/(\d{1,})(,|\])/这个模式缺少一些东西。无法获得第一个数字正确,有时是最后一个,有时我得到更多的数字

2 个答案:

答案 0 :(得分:1)

使用这个:/\[[0-9,]+\]/。假设它会起作用

答案 1 :(得分:1)

preg_match_all本身并不能满足您的需求。您可以从preg_match_all开始,例如:

preg_match_all("/\[((\d,)+\d)\]/",$string,$matches);

上面的内容将在$matches[1]中为您提供一个完整的数字字符串数组,这些数字仍以逗号分隔。在你的第二个例子中,它将由

组成
var_dump($matches[1]);
arrray(1) { [0] => string(5) "2,3,4" }

然后,您可以使用join / implode合并该数组的元素:

$all_matches = implode(',',$matches[1]);

在你提供的两个例子中,这都不会做任何事情,但是如果你有一个多个括号内的所有数字元素的情况,它会将它们全部合并在一起(这可能是你真正想要的,也可能不是你想要的)。

然后,您可以使用拆分

获取各个数字项目
$individual_matches = split(',',$all_matches);

这将为您提供第一个示例中的1,5,6,7,9,10数组或第二个示例中的2,3,4数组。显然,如果你想保持多个匹配分开,你可以简单地循环遍历原始数组拆分:

$all_matches = $matches[1];
foreach ( $all_matches as $key => $value ) { 
    $all_matches[$key] = split(',',$all_matches[$key]);
}

这将为您提供一组数组,其中每个第1级代表括号中的数字组,第二级是从组中分出的各个数字。