前言

我们将对字符串a-----b-----b---来进行举例。

贪婪量词

a.*b 将匹配满足条件最长的字符串 a-----b-----b

*因为它比较贪,所以被称为贪婪量词。

贪婪量词的工作方式:

首先将:a-----b-----b---全部吃掉,从右边一个一个地吐出来

  1. a-----b-----b---不匹配,吐出一字符
  2. a-----b-----b--不匹配,再吐出一字符
  3. a-----b-----b-不匹配,再吐出一字符
  4. a-----b-----b匹配了,结束。如果再不匹配继续吐,直到没有字符了,匹配失败

懒惰量词(勉强量词)

a.*? 将匹配满足条件最短的字符串 a-----b

从左边一个一个地吃掉字符

  1. a 不能匹配表达式,继续吃
  2. a- 不能匹配表达式,继续吃
  3. a--不能匹配表达式,继续吃
  4. a--- 不能匹配表达式,继续吃
  5. a---- 不能匹配表达式,继续吃
  6. a-----不能匹配表达式,继续吃
  7. a-----b 终于能匹配表达式了,匹配结束,匹配位置留于字符 b 后面,继续其他的匹配。如果不能匹配则一个一个地吃掉整个字符串直到吃完为止若还没有匹配则匹配失败。

占有量词

占有式量词很像贪心式量词,它会选择尽可能多的内容,但它不回溯。它不会放弃找到的内容,它很自私。优点是速度快。

对字符串:0000000000进行举例。

我们先匹配以零开头的多个零,然后再匹配以零结尾的多个零。

0.*+ 所有零都被标亮了。

.*+0不匹配任何内容。因为它没有回溯,一下子选定了所有的输入,不再回来查看。它一下子没有在结尾找到零,也不知该从哪里找起。