a(.*?)d求解

来源:3-5 使用正则表达式进行匹配

慕粉3705399

2016-07-29 18:33

.表示除了换行符,其它都能匹配,*表示0到多,那么在这里.*就表示a和d之间0到多个字母。?是懒惰模式,尽量少的匹配,那么就应该是取0个,应该什么都没有才对呀,为什么会显示bc呢

写回答 关注

4回答

  • 慕移动9181930
    2022-03-26 23:40:14
  • 啊B
    2016-11-22 17:04:18

    .*? 是尽可能的少, 但不是说直接为0,是在匹配到的前提下,尽可能的少取。

    这道题是有abcd这个情况的,所以取这个。

    再比如  原来的$str = 'abcdaaaad’    这个的话  如果是贪婪 就会取到'abcdaaaad'  非贪婪(懒惰)就会取到'abcd'而不是   空。

    否则还用正则表达式干嘛? 直接默认为空就行了,还多一种 懒惰模式没有意义。

  • 慕粉3297688
    2016-08-06 10:56:34

          一般人认为?表示懒惰模式但是:

         '/a(.*?)d/'是匹配了两个"内的内容,.表示匹配任意字符,*表示匹配0次以上,合在一起就是匹配全文字符串,但是因为前后有引号显示,所以匹配的是引号内的全文。而?则是表示非贪婪匹配,也就是碰到符合这个条件的立马就匹配,你可以把?取消掉试试就能立马看出差别了。推荐多去看看正则30分钟入门教程,绝对经典。

    <?php
    $subject = "my email is spark@imooc.com";
    //在这里补充代码,实现正则匹配,并输出邮箱地址
    $pattern = '/[\w\-]+@\w+\.\w+/';
    preg_match($pattern, $subject, $matches);
    echo $matches[0];
    ?>

    解释一下'/[\w\-]+@\w+\.\w+/':判断是否为有效的Email格式.
    ^ 匹配一行的开头
    \w 指数字英文加下划线
    \.指一个字符"."
    \- 指一个字符"-"
    [\w\.\-] 指一个范围 即 数字、字母、下划线、字符"."、字符"-"
    + 量词 一个或多个
    [\w\.\-]+ 指一个或多个[\w\.\-] 这样的字符,如 "aaa" "-ab" "c" "s._-l"
    @ 指一个字符"@"
    量词 一个或零个
    * 量词 零个或多个

    计算机学习

    求正则三十分钟链接

    2017-07-13 08:39:36

    共 1 条回复 >

  • 慕粉3734759
    2016-07-29 20:59:05

    *?      重复任意次,但尽可能少重复

    +?       重复1次或更多次,但尽可能少重复

    ??       重复0次或1次,但尽可能少重复

    {n,m}?        重复n到m次,但尽可能少重复

    {n,}?     重复n次以上,但尽可能少重复

    所以并不是取0个,,举个例子

    a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab


PHP进阶篇

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

181720 学习 · 2575 问题

查看课程

相似问题