• wordpress CMS主题:ssmay主题wordpress CMS主题:ssmay主题
  • 首页 > PHP开发 > php正则表达式(二):分组、懒惰、贪婪

    php正则表达式(二):分组、懒惰、贪婪

    作者: 分类:PHP开发 点击: 82 次
    wordpress CMS主题:ssmay主题

      前面我们介绍了php正则表达式最基础的元素,可以实现简单的匹配。但是,对于一些比较复杂的,只这些是不够的。今天,我们接着往下讲,在一些复杂的匹配中,我们会用到“分组、懒惰和贪婪。那么,什么是分组、懒惰、贪婪呢?下面一起来看看。

      一、分组:

      使用小括号分开正则规则,每一个小括号就是一个分组,每个分组会自动拥有一个组号。从左向右1、2、3...如:

      /([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})/

      二、?: 匹配但不捕获匹配的文本,也不给此分组分配组号(分组中会用到)

      如:(X)中的X会被作为新增的一个组序号输出,比如(A)(B),A的序号1,B的序号2;
      如果(?:A)(B),A将没有序号不输出,B的序号为1

      三、懒惰与贪婪:

      *? 重复任意次,但尽可能少重复
      +? 重复1次或更多次,但尽可能少重复
      ?? 重复0次或1次,但尽可能少重复
      {n,m}? 重复n到m次,但尽可能少重复
      {n,}? 重复n次以上,但尽可能少重复

      .*? 这里的? 表示懒惰模式,不贪婪向后。(.+?)是同理。 如下例:

      $str='<p><img src="up/07/12.jpg" alt=""/></p><p><img src="file/5.php" alt=""/></p>';
      $pattern="/src=\"(.*?)\"/";
      preg_match_all($pattern,$str,$match);
      print_r($match);

      打印结果:

      Array(
      [0] => Array( [0] => src="up/07/12.jpg", [1] => src="file/5.php" )
      [1] => Array( [0] => up/07/12.jpg, [1] => file/5.php )
      )

      如果去掉? 改成 $pattern="/src=\"(.*)\"/";

      打印结果:

      Array(
      [0] => Array( [0] => src="up/07/12.jpg" alt=""/></p><p><img src="file/5.php" alt="")
      [1] => Array ([0] => up/07/12.jpg" alt=""/></p><p><img src="file/5.php" alt=")
      )

      可见,使用?后,每一次都是匹配到最近的1个双引号就结束,再进行下一次这样的匹配,如此循环;
      而去掉?后,就会贪婪匹配,一直匹配到最后1个双引号,只会匹配一次

    文章作者:honor
    本文地址:http://wanlimm.com/77201807256160.html
    本文时间:2018-07-25 11:38:04
    版权所有 © 转载时必须以链接形式注明作者和原始出处!

    上一篇:
    下一篇:
    wordpress CMS主题:ssmay主题

    或许你会感兴趣的文章:

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    This site uses Akismet to reduce spam. Learn how your comment data is processed.