正则表达式中关于贪婪、勉强、独占三种模式的理解

定义

贪婪(Greedy):匹配器被强制要求第一次尝试匹配时读入整个输入串,如果第一次尝试匹配失败,则从后往前逐个字符地回退并尝试再次匹配,直到匹配成功或没有字符可回退。
勉强(Reluctant):从输入串的首字符位置开始,在一次尝试匹配查找中只勉强地读一个字符,直到尝试完整个字符串。
独占(Possessive):直接匹配整个字符串,如果完全匹配就匹配成功,否则匹配失败。效果相当于 equals() 。

一个例子

String:“xfooxxxxxxfoo”

  • .*foo 匹配到xfooxxxxxxfoo。过程是:
    • (1).*识别成xfooxxxxxxfoo,此时foo匹配不上东西,匹配失败。
    • (2).*识别成xfooxxxxxxfo,匹配失败。
    • (3).*识别成xfooxxxxxxf,匹配失败。
    • (4).*识别成xfooxxxxxx,匹配到xfooxxxxxxfoo。
  • .*?foo 匹配到xfoo和xxxxxxfoo,过程是:
    • (1).*识别成x,匹配到xfoo。
    • (2).*识别成第一个foo后面的x,匹配失败。
    • (3).*识别成xx,匹配失败。
    • (4).*识别成xxx,匹配失败。
    • (5).*识别成xxxx,匹配失败。
    • (6).*识别成xxxxx,匹配失败。
    • (7).*识别成xxxxxx,匹配到xxxxxxfoo。
  • .*+ 匹配失败,过程是:
    • (1).*识别成xfooxxxxxxfoo,匹配失败,结束匹配。

你可能感兴趣的:(正则表达式中关于贪婪、勉强、独占三种模式的理解)