5.1 有多少个匹配
5.1.1 匹配一个或多个字符
想要匹配同一个字符(或字符集合)的多次重复,只要简单的给这个字符(或字符集合)加上一个+字符作为后缀就行了。
+匹配一个或多个字符(至少一个;不匹配零个字符的情况)
+是一个元字符,如果需要匹配+本身,就必须使用它的转义系列+
例子:匹配电子邮件地址
[w.]+@[w.]+.w+
[w.]+@[w.]+.[w.]+
备注:最后一个[w.]+考虑到有些邮件地址会有多层域名(或主机名)
一般来说,当在字符集合里使用的时候,像.和+这样的元字符将会被解释为普通字符,不需要被转义,但转义了也没坏处。
5.1.2 匹配零个或多个字符
如果想要匹配一个可有可无的字符(该字符出现零次或出现多次),只要在该字符(或字符集合)的后面加上*后缀就行。
例子:匹配电子邮件地址
w+[w.]*@.w+
*是一个元字符,如果需要匹配*本身,就必须使用它的转义系列*
5.1.3 匹配零个或一个字符
?只能匹配一个字符(或字符集合)的零次或一次出现,最多不超过一次。
例子:匹配一个URL地址
http[s]?://[w./]+
?是一个元字符,如果需要匹配?本身,就必须使用它的转义系列?
5.2 匹配的重复次数
正则表达式提供了一个用来设定重复次数(interval)的语法。重复次数要用{和}字符来给出,把数值写在它们之间。
{和}是一个元字符,如果需要匹配{和}本身,就必须使用它的转义系列{和}
5.2.1 为重复匹配次数设定一个精确的值
将数值写在{和}之间即可。如{3}
例子:匹配RGB值
#[0-9A-Fa-f]{6}
#[[:xdigit:]]{6}
5.2.2 为重复匹配次数设定一个区间
{}语言可以用来为重复匹配次数设定一个区间,也就是为重复匹配次数设定一个最小值和最大值。如{2,4},最少重复2次,最多重复4次。
例子:检查日期格式是否正确
[d]{1,2}[- /][d]{1,2}[- /][d]{2,4}
5.2.3 匹配“至少重复多少次”
{3,}表示至少重复3次,等价于“必须重复3次或更多次”
5.3 防止过度匹配
常见的贪婪型元字符和它们的懒惰型版本
贪婪型元字符
|
懒惰型元字符
|
*
|
*?
|
+
|
+?
|
{n, }
|
{n, }?
|