【发布时间】:2014-02-07 14:08:28
【问题描述】:
我正在尝试使用单个 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 的回调(需要它来应对代码高尔夫挑战)。
【问题讨论】:
-
这个输出正是文档所描述的。 “干净的输出”对您意味着什么?
-
我要求一个没有空值的输出(如我的问题中所问)
-
那是因为
(a)|(b)不是字母限制。并且所有 3 项在结果中都是正确的 -
添加了预期的输出,让您了解所要求的内容