我希望通过以下内容获得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,})(,|\])/
这个模式缺少一些东西。无法获得第一个数字正确,有时是最后一个,有时我得到更多的数字
答案 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级代表括号中的数字组,第二级是从组中分出的各个数字。