在上一节中,介绍了元字符的概念。在这一节中,介绍重复匹配的概念,通过将元字符与重复匹配的语法结合,可以实现对多个字符、段落等的匹配。
匹配一个或多个字符
+
作为一个字符、或者字符集合的后缀,来匹配一个或多个连续出现的字符。
例如[0-9]+
表示匹配1个数字,或者多个数字。a+
表示匹配1个字母,或者多个字母。
根据上图结果显示,cat.+
匹配到了以cat开头的字符串。
匹配零个或多个字符
*
作为一个字符、或者字符集合的后缀,来匹配零个或多个连续出现的字符。
例如[0-9]*
表示匹配0个数字,或者多个数字。a*
表示匹配0个字母,或者多个字母
cat_*[\d]+@qq.com
表示匹配cat开头,包含零个或者1个下划线_,包含至少一个数字的qq邮箱。
根据上图显示,该正则表达式匹配到了预想的结果。
匹配零个或一个字符
?
作为一个字符、或者字符集合的后缀,表示只能匹配零次或者一次。
上一个案例中,针对含有下划线的邮箱,可以采用下面的正则表达式。cat_?[\d]+@qq.com
根据上图显示,该正则表达式同样匹配到了预想的结果。
设定准确重复匹配次数
由于 +
和 *
匹配的个数没有上限,而使用 ?
最少也只能匹配0个或者1的个数。为解决对匹配次数的准确控制,正则表达式提供了重复次数的操作。
{
与 }
包含数字的语法结构,来匹配设定数字的重复匹配次数。
正则表达式cat[\d]{2}
表示匹配cat开头,后面只有两个数字的字符串。
由上图显示,该正则表达式匹配到了全文中,唯一的cat12字符串。
设定区间重复匹配次数
{a , b}
包含数字a与数字b的语法结构,表示重复匹配次数最小值a与最大值b,表示最少匹配a次,最多匹配b次。
正则表达式cat[\d]{2,3}
表示匹配cat开头,后面只有两个数字或者三个数字的字符串。
根据上图显示,该正则表达式匹配到了全文中的cat12、cat123字符串。
设定只有最小值的重复匹配次数
{a , }
包含数字a的语法结构,表示重复匹配次数最小值a,表示最少匹配a次。
正则表达式cat[\d]{2,}
表示匹配cat开头,后面至少有两个数字的字符串。
根据上图显示,该正则表达式匹配到了全文中的cat12、cat1234字符串。
防止过度匹配
在使用.字符
以及*
等贪婪型元字符时来匹配时,会发生匹配过渡的情况。
正则表达式<cat>.*</cat>
在匹配时,将两个<cat>.*</cat>
之间的ads也匹配成在了一起。即发生了过度匹配的情况。
在这种情况下,应该使用对应的懒惰型元字符来抵消其贪婪行。
贪婪型元字符 *
的懒惰型元字符 *?
贪婪型元字符 +
的懒惰型元字符 +?
贪婪型元字符 {n, }
的懒惰型元字符 {n, }?
对上面的正则表达式进行修改,改为<cat>.*?</cat>
根据上图可以看出,这次的正则表达式准确的匹配到了设想的结果。
「参考」
《正则表达式必知必会》