清晰的认识量化值

这个问题在这里已经有了答案:

  • 贪婪与不愿意与拥有量词7答案

  • 量词有三种类型:

  • “规则”量词(*,+,?)也被称为“贪婪”量词;
  • “懒惰”,量词(* ?, + ?, ??);
  • “占有”量词(* +,++,?+)。
  • 例如,请输入以下内容:

    The answer is 42
    

    现在,采取这个正则表达式:

    .*(d+)
    

    问题是,根据你使用哪个*版本, (d+)会捕获什么.*

  • 如果* ,将被捕获的是2 ;
  • 如果*? ,将被捕获的是42 ;
  • 如果*+ ,正则表达式不匹配。
  • 为什么:

  • 贪婪的量词吞噬一切可能; 然而,它在途中保留了它所匹配的位置; 当吞下全文时,仍然有d+匹配; 它会不情愿地回溯直到d+满意,并且d+满足2 ;
  • 懒惰量词尝试并查询以下正则表达式标记:“if d +不匹配,然后吞下一个字符”; 当遇到4它让d+完成它的工作,因此42被捕获;
  • 所有格量词是占有欲; 它像贪婪的量词一样工作,只是它不保留任何位置; 因此,在到达最后时,正则表达式引擎会询问“OK,您可以放弃吗?”, .*+表示“No ...”,因此不匹配。

  • 所有格量词意味着没有回溯。

    当你尝试匹配mdfoo时会发生什么.*+foo

  • 模式的第一部分(即.*+ )匹配整个字符串mdfoo
  • 但是模式的第二部分(即foo )在第一场比赛后没有找到
  • 由于没有回溯,该尝试立即失败
  • 这些占有量词很清楚地在这里解释。

    链接地址: http://www.djcxy.com/p/76905.html

    上一篇: clear understanding on possesive quantifiers

    下一篇: Regular Expression (\S+?) vs (\S+))