正则表达式的重复匹配
1. 匹配一个或多个字符,要想匹配同一个字符(或字符集合)的多次重复,只要简单地给这个字符(或字符集合)加上一个+字符作为后缀就可以了
+匹配一个或多个字符,至少一个,不匹配0个字符
注: +是一个元字符,如果需要匹配+本身,必须使用它的转义序列\+
一个例子:
Send personal email to ben@forta.com or ben.forta@forta.com For questions about a book use support@forta.com If your message is urgent try ben@urgent.forta.com. Feel free to send unsolicited email to spam@forta.com (wouldn't it be nice if it were that simple , huh?)
正则表达式 [\w.]+@[\w.]+\.\w+
结果:
Send personal email to ben@forta.com orben.forta@forta.com For questions about a book use support@forta.com If your message is urgent try ben@urgent.forta.com. Feel free to send unsolicited email tospam@forta.com (wouldn't it be nice if it were that simple , huh?)
如果 正则表达式为 \w+@\w+\.\w+: 会出现这样问题: 只考虑到在@字符的后面会有.字符,没有考虑到@之前会有.字符, \w只能匹配字母数字和下划线,不能匹配.字符
注意:在[\w.]没有对.字符进行转义,尽管如此,原始文本里的.字符匹配出来了,一般来说,当在字符集合里使用的时候,像.和+等元字符将被解释成普通字符, 不需要转义,但转义也是可以的, [\w.] 和[\w\.] 的使用效果是一样的,在这里要匹配邮件地址,这里允许.字符开头(在实际应用中是错的),.字符是电子邮件地址的合法字符,但是用作邮件地址的第一个字符就不合法了
2 匹配0个或多个字符
要匹配一个可有可无的字符,需要用*元字符
看一个例子
Hello .ben@forta.com is my email address
正则表达式 \w+[\w.]*@[\w.]+\.\w+
结果 : Hello .ben@forta.com is my email address
另外需要注意的是,*与+的区别是: + 匹配一个或多个字符(或字符集合),最少要匹配一次, *匹配 0个或多个字符,可以没有匹配,如果需要匹配* 本身,必须使用它的转义序列\*.
3 匹配 0 或 1 个字符,需要用到?
如果需要在一段文本里匹配某个特定的字符(或字符集合)而该字符可能出现、也可能不出现,?无疑是最佳的选择
到现在,需要仔细体会+,*,?的异同点
先看一个例子
The URL is Ben Forta, to connect securely use Ben Forta instead.
正则表达式 http://[\w./]+
结果: The URL is Ben Forta, to connect securely use Ben Forta instead.
这里没有匹配到https://, 简单地将表达式改为 https*://[\w./]+, 不能解决问题,因为那会将类似httpsssssss:// 匹配认为是合法URL地址,显然不合需求!
解决方法是:https?://[\w./]+