(PHP)在preg_match中获取null而不是获取空字符串

时间:2011-09-09 16:21:52

标签: php regex zend-framework preg-match

我有以下代码:

$pattern = '(([a-z]{2})/)?(([a-z]{3,})/)?(\d{4}+)(/(\d{2})(/(\d{2}))?)?';

preg_match('#^' . $pattern . '$#i', '2010/12/01', $match);

$match = Array (
    [0] => 2010/12/01
    [1] => 
    [2] => 
    [3] => 
    [4] => 
    [5] => 2010
    [6] => /12/01
    [7] => 12
    [8] => /01
    [9] => 01
)

问题是$ match [1],$ match [2],$ match [3]和match [4]是string(0)有没有办法修改{{1} }以获取$pattern而不是null

1 个答案:

答案 0 :(得分:1)

不,这在PHP中是不可能的。 preg_match()函数只处理字符串, null 是完全其他的数据类型。

将此转换为您想要的内容很简单。在PHP 5.3中,您可以使用array_walk()的匿名函数迭代数组,然后使用缩短的ternary operation更新您的值。

array_walk($array, function(&$val) { $val = $val ?: null; });