登录

正则表达式*的问题

<?php

$zz = '/奥迪*/';

$string = "奥迪奥迪迪2500都是我最爱";

if(preg_match($zz, $string, $matches)){

   echo '匹配到了,结果为:';

   var_dump($matches);

}else{

   echo '没有匹配到';

}

?>

为什么输出结果是‘奥迪’,而不是‘奥迪奥迪’或者‘奥迪迪’,*不是最少0次吗,有两次情况下怎么没全部提取出来

# PHP
益伦 益伦 2345 天前 1324 次浏览

全部回复(8) 我要回复

  • 又白又帅又可爱

    又白又帅又可爱2017-11-20 12:15:33

    使用preg_match应该匹配到“奥迪”,使用preg_match_all应该匹配到“奥迪奥迪迪”,

    这是理论结果,可实际上正则匹配中文的例子我还没有见到过,正则只能检查是不是中文和限制长度,而且是用的中文的字节码,类似这种:u4e00-u9fa5

    回复
    0
  • 益伦

    好吧,试了一下中文确实很多不行,我以后再少用中文做例子

    益伦 · 2017-11-20 23:17:33
  • 路过

    路过2017-11-18 10:27:36

    preg_match 只匹配一个

    preg_match_all 才是全部匹配结果

    建议去查查手册

    回复
    0
  • 益伦

    <?php $zz = '/250*/'; $string = "迪奥和奥迪25000都是我最爱"; if(preg_match($zz, $string, $matches)){ echo '匹配到了,结果为:'; var_dump($matches); }else{ echo '没有匹配到'; } ?> 越来越乱了,那这代码结果为什么是25000呢,而不是你说得250?

    益伦 · 2017-11-18 11:01:48
    益伦

    匹配它前面一个字符任意遍(0或任意次)

    益伦 · 2017-11-18 11:08:10
    益伦

    好吧,谢谢你愿意解答

    益伦 · 2017-11-20 23:12:45
    路过

    你知道 * 的意思吗?

    路过 · 2017-11-18 11:03:33
    路过

    看手册去吧

    路过 · 2017-11-18 11:39:39
  • 取消 回复 发送