Java正则表达式有3中量词匹配模式:
1.贪婪量词:
先看整个字符串是否匹配,如果没有发现匹配,则去掉最后字符串中的最后一个字符,并再次尝试,如果还是没有发现匹配,那么,再次去掉最后一个字符串的最后一个字符,整个匹配过程会一直重复直到发现一个匹配或者字符串不剩任何字符。简单量词都是贪婪量词。
贪婪量词匹配时,首先将整个字符串作为匹配的对象,然后逐步从后向前移除不匹配的字符,尽可能找到最多的匹配。
2.惰性量词:
先看字符串中的第一个字符是否匹配,如果单独一个字符不够,则读入下一个字符,组成两个字符的字符串,如果还没有发现匹配,惰性量词继续从字符串中添加字符直到发现一个匹配或者整个字符串全部检查完都不匹配。惰性量词和贪婪量词工作方式恰好相反。
惰性量词匹配时,只匹配第一个字符,然后依次添加字符,尽可能找到最少匹配。
3.支配量词:
只尝试匹配整个字符串,如果整个字符串不能产生匹配,则不进行进一步尝试。
支配量词目前只有java中支持,支持量词是贪婪量词第一次匹配不成功时,阻止正则表达式继续匹配,使得正则表达式效率更高。
贪婪量词 惰性量词 支配量词 描述
X? X?? X?+ X出现0次或者1次
X* X*? X*+ X出现0次或者多次
X+ X+? X++ X出现1次或者多次
X{n} X{n}? X{n}+ X只出现n次
X{n,} X{n,}? X{n,}+ X至少出现n次
X{n,m} X{n,m}? X{n,m}+ X至少出现n次,至多不超过m次