相比与第一篇博文中的元字符之定位符来讲,限定符理解起来就比较容易了,但值得注意的是:限定符的作用范围,其作用范围为:位于限定符前面的一个子表达式。这里的子表达式可以是单个字符、转移字符或者是用括号()括起来的子表达式,抑或是中括号[]括起来的字符类。这与字符的运算优先级有关。这里我们用到时会简单说明,并且以后会进行专题讲解。
限定符有6种,分别是* + ? {n} {n,} {n,m}.
本篇博文,将对限定符进行介绍,同时也会对限定符的“贪婪模式”与“非贪婪模式”进行讨论记录。需要说明的是:所有限定符默认情况下都是以“贪婪模式”进行匹配的。取消贪婪模式的方法是在限定符后加限定修饰符?
一、元字符之限定符*
匹配之前的子表达式0次或多次(≥0)
例如:^ab*$
可以匹配的字符串有:a ab abb abbb等首字母为a后接0个或多个b。
在默认的贪婪模式下,如果使用^ab*$对字符串abbbbbc进行识别,那么匹配出来的是字符串abbbbb而不是ab。原因在于贪婪模式是尽可能的消耗多的字符串。而如果在限定符后加上修饰符?,则使贪婪模式关闭,转变为非贪婪模式。使用^ab*$对字符串abbbbbc进行识别,匹配得到的是字符串a。
二、元字符之限定符+
匹配之前的子表达式1次或多次(≥1)
例如:\bab+
可以匹配的字符串有:ab abb abbb等首字母为a后接至少一个b。
这里默认的依然是贪婪模式,所以如果对字符串abbbbc进行识别,那么匹配出来的是abbbb,而如果使用\bab+?对abbbb进行识别,那么识别出来的将是ab 。
在对字符串进行识别的时候,贪婪模式总是尽可能多的消耗字符,尽可能的往字符串右侧推进。所以,使用限定符的时候请注意贪婪模式的使用。
三、元字符之限定符?
匹配之前的子表达式1次或0次
例如:abc?
可以匹配的字符串有:ab和abc两个。ab之后无字母或者跟一个c。
默认为贪婪模式,优先匹配字符abc。abc??为非贪婪模式,优先匹配字符ab
四、元字符之限定符{n}
匹配之前的子表达式确定次数n次
例如:ab{3}
可以匹配的字符串有:abbb。字母a之后跟3个b,共4位。
在逻辑与功能上讲,{n}限定符的贪婪模式与非贪婪模式没有区别。其前面有n个子表达式的优先级最高,且只有这一种情况。
五、元字符之限定符{n,}
匹配之前的子表达式至少n次(≥n)
例如:ab{3,}
可以匹配的字符串有:abbb abbbb abbbbb 等,字母a之后跟至少3个字母b。{3,}的意思是至少3个。而且有ab{1,0}等价于ab+ ,也有ab{0,}等价于ab*
在贪婪模式下ab{3,}优先匹配abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb即尽可能多的b。而ab{3,}?则优先匹配abbb
六、元字符之限定符{n,m}
匹配之前的子表达式至少n次,至多m次(≥n且≤m)
例如:ab{3,5}
可以匹配的字符串有:abbb abbbb abbbbb三个,字母a之后跟3到5个b。同时应注意ab{3,3}等价于ab{3}
贪婪模式下优先匹配abbbbb 非贪婪模式下优先匹配abbb 如果要匹配确定数目的字母,请使用限定符{n}