讨论:首页

来自PHP百科全书
跳转至: 导航搜索

preg_match的一个奇怪的问题(PHP7)

代码如下:

for ($i=0; $i < 10; $i++) { 
    echo $i, ' ', var_export(preg_match('/[345789]/', $i), true), PHP_EOL;
}

结果:

0 0
1 0
2 0
3 1
4 0
5 0
6 0
7 1
8 0
9 0


难道不应该是3 4 5 7 8 9均可以匹配到么?

Ps:此问题是在鸟哥博客看到的留言, 觉得很是有意思, 便提出来讨论讨论~

Fix:以上输出不符合预期是因为正则函数使用的不对,该函数返回的是匹配成功的次数,而不是匹配的值,手册中的函数原型是

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

就是说应该使用第三个参数来输出匹配的结果

preg_match('/[345789]/', $i, $matches);
print_r($matches);