为什么php中的*会匹配到null,是php的bug吗,还是其它语言也会这样?

php > preg_match_all/.*/,null,$arr;
php > print_r$arr;
Array [0] => Array [0] => php > var_dump$arr;
array1 { [0]=> array1 { [0]=> string0 "" }
}
php > preg_match_all/.+/,null,$arr;
php > var_dump$arr;
array1 { [0]=> array0 { }
}
php > preg_match_all/.*/U,Love,$arr;
php > var_dump$arr;
array1 { [0]=> array9 { [0]=> string0 "" [1]=> string1 "L" [2]=> string0 "" [3]=> string1 "o" [4]=> string0 "" [5]=> string1 "v" [6]=> string0 "" [7]=> string1 "e" [8]=> string0 "" }
} 

在PHP里面 . .表示任意字符 表示任意位 ,既然是任意位 0位也可以,null,不匹配任意字符,那正好是0位,10位也是任意位,所以是你没有正则理解正则

php是门弱类型语言, preg_match的第二个参数是字符串, 所以null被直接解析成了空字符串。

https://github.com/php/php-src/blob/PHP-5.6.16/ext/pcre/php_pcre.c#L569

发表评论

电子邮件地址不会被公开。 必填项已用*标注