我正在尝试使用单个preg_match_all
匹配两个正则表达式,我需要获得包含匹配项的2个数组。
这是我目前的代码:
$s = 'abab';
preg_match_all('/(a)|(b)/', $s, $a);
var_dump($a);
如果不考虑生成的多维数组是:
,它的效果很好array (size=3)
0 =>
array (size=4)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'a' (length=1)
3 => string 'b' (length=1)
1 =>
array (size=4)
0 => string 'a' (length=1)
1 => string '' (length=0)
2 => string 'a' (length=1)
3 => string '' (length=0)
2 =>
array (size=4)
0 => string '' (length=0)
1 => string 'b' (length=1)
2 => string '' (length=0)
3 => string 'b' (length=1)
所以,我可以使用$a[1]
和$a[2]
,但正如您所看到的,这些数组在“不匹配”键上有空值。
我需要:
array (size=3)
0 =>
array (size=4)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'a' (length=1)
3 => string 'b' (length=1)
1 =>
array (size=2)
0 => string 'a' (length=1)
1 => string 'a' (length=1)
2 =>
array (size=2)
0 => string 'b' (length=1)
1 => string 'b' (length=1)
有一些参数传递给preg_match_all
以获得没有空值的干净输出?我已经尝试了array_filter()
但它没有删除它们我正在寻找一个简短的解决方案,所以我不能使用array_filter的回调(需要它代码 - 高尔夫挑战赛。)
答案 0 :(得分:1)
不知道,为什么你需要这种方式,但最短的我想出来满足你的要求。
$s = 'abab';
preg_match_all('/(a)|(b)/', $s, $a);
// filter all at once
$a = array_map('array_filter', $a);
var_dump($a);