正则表达式对于数量限定符如?,+,*,{n,m}的匹配默认是贪婪模式,比如:
a.*b匹配acbab的结果是acbab而不是acb
正则表达式支持懒惰模式,也就是在数量限定符后加一个数量修饰词(quantifier),用问号表示,比如:
a.*?b匹配acbab的结果是acb而不是acbab2cto
而语言在正则表达式中支持一种Possessive数量修饰词,用加号表示。其字面意思是像贪婪模式一样匹配,但不回溯。这到底是什么意思呢?其实这和匹配算法相关,比如:
在贪婪模式下,正则表达式a.*b在匹配acbac时,在匹配成功第一个字符a后,匹配算法会继续往后读取字符a之后的字符来匹配.*,这时贪婪模式就起作用了,a后面的cbac都能匹配.*,但当匹配算法继续往后读取字符时,发现已经没有字符可读了,无法匹配正则表达式中的b了,于是就回溯一个字符,看c是否能匹配b,不能,继续回溯,直到回溯到b时,才匹配到了acb。而a.*+b在匹配时是不会回溯的,也就是说当贪婪地读到最后一个字符时发现无有字符与b匹配了,就认为匹配失败了。
再举几个例子
(ab)*+a匹配ababacd时可以匹配到ababa,因为两个ab之后没有ab了,无法贪婪
a?+a匹配aaaaa时会匹配到aa,但a++a和a{0,10}+a却会匹配失败
博洋教育今日就业明星:王荣生福建三元达软件有限公司担任java工程师
王荣生:福建信息职业技术学院软件工程专业,大专学历。在博洋教育参加java软件项目实训,该生学习态度端正,有比较好的学习心态,会主动请教老师同学。毕业后经过就业部老师的推荐,现在成功入职福建三元达软件有限公司。
班级名称
CN1305脱产班
班级性质
脱产班
开班时间
2013年8月12日
上课地点
上课方式
脱产
目前状态
热招