-1

我想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,})(,|\])/。无法正确获取第一个数字,有时是最后一个,有时我会得到更多数字

4

2 回答 2

1

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

于 2012-12-03T22:21:24.570 回答
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]);

在您提供的两个示例中,这将无济于事,但是如果您遇到多个括号内的所有数字元素的情况,它将把它们合并在一起(这可能是您真正想要的,也可能不是您真正想要的)。

然后,您可以使用 split 获取单个数字项

$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]);
}

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

于 2012-12-03T22:54:45.593 回答