用使用正则*匹配不到 求帮忙理解

$str = 'baaacad';
$pre = '/a*/'; //匹配字符串中的a匹配不到
preg_match($pre,$str,$arr);
var_dump($arr);

阅读 3.1k
3 个回答

你输出 var_dump(preg_match($pre,$str,$arr));

显示匹配到了一个, 可是为什么$arr里面没你想要的值?

实际上, 这个正则匹配到东西了, 就是 在最开始位置的那个0宽的字符, 如下演示

0 1 2 3 4 5 6
 b a a a c a d // 为了演示, 把空白也格开了.
^
|====== 实际上正则匹配到这儿了, 所以结果是一个strlen() == 0的字符串.
        因为a* 表示0个或多个a, 在最开始就是0个a

/a*/ 表示的是a开头的字符串同时a出现0次或多次。 $str = 'baaacad' 属于匹配到了规则a出现了0次,返回的是空

$str = 'baaacad';

preg_match("/(a)+/",$str,$arr);

var_dump($arr);

array (size=2)
  0 => string 'aaa' (length=3)
  1 => string 'a' (length=1)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题