preg_match_all('/.+/',null,$arr); php > var_dump($arr);"> 跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

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

php > preg_match_all('/.*/',null,$arr); php > print_r($arr); Array ( [0] => Array ( [0] => ) ) php > var_dump($arr); array(1) { [0]=> array(1) { [0]=> string(0) "" } } php > preg_match_all('/.+/',null,$arr); php > var_dump($arr); array(1) { [0]=> array(0) { } } php > preg_match_all('/.*/U','Love',$arr); php > var_dump($arr); array(1) { [0]=> array(9) { [0]=> string(0) "" [1]=> string(1) "L" [2]=> string(0) "" [3]=> string(1) "o" [4]=> string(0) "" [5]=> string(1) "v" [6]=> string(0) "" [7]=> string(1) "e" [8]=> string(0) "" } }
回复内容:
php > preg_match_all('/.*/',null,$arr); php > print_r($arr); Array ( [0] => Array ( [0] => ) ) php > var_dump($arr); array(1) { [0]=> array(1) { [0]=> string(0) "" } } php > preg_match_all('/.+/',null,$arr); php > var_dump($arr); array(1) { [0]=> array(0) { } } php > preg_match_all('/.*/U','Love',$arr); php > var_dump($arr); array(1) { [0]=> array(9) { [0]=> string(0) "" [1]=> string(1) "L" [2]=> string(0) "" [3]=> string(1) "o" [4]=> string(0) "" [5]=> string(1) "v" [6]=> string(0) "" [7]=> string(1) "e" [8]=> string(0) "" } }
在 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 PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载

相关文章