1. 匹配一个或多个字符(+)
要想匹配某个字符(或字符集合)的一次或多次重复,只要简单地在其后面加上一个+字符。+匹配至少一个字符,比如要匹配以下电子邮箱
ben@forta.com
support@forta.com
spam@forta.com
正则表达式为:\w+@\w+.\w+
说明:第一个\w+匹配@符号前的字符串,@不是元字符所以不需要转义,第二个\w+匹配紧跟@后面,点前面的字符串,\.匹配.,第三个\w+匹配点后面的字符串
再比如如下邮箱:
ben@forta.com
ben.forta@forta.com
support@forta.com
ben@urgent.forta.com
spam@forta.com
用之前的表达式就不能完全匹配,可以修改为:[\w.]+@[\w.]+.\w+
2. 匹配零个或多个字符 (*)
如果要匹配零个或多个字符用字符*,和+d 用法完全一样
.forta@forta.com对于电子邮箱来说,第一个点是不需要的,用+匹配就会出问题,如果不想匹配第一个点可以修改表达式为:\w+[\w.]@[\w.]+.\w+
这样第一个点就不会被匹配了。
3.匹配零个或一个字符(?)
如果一个字符只允许出现0次或1次,可用符号?来匹配,对于URL地址有两类文本:http://和https://,对于如下两个网址,如果都想匹配,可用表达式: https?😕/[\w./]+
The URL is http://www.forta.com/
The URL is https://www.forta.com/
说明:?号前面的字符或字符集合只能出现0次或1次。
4. 匹配的重复次数
在某些情况下,我们需要匹配字符串出现的具体次数,此时可在相应表达式后面加上符号{a,b},表示匹配a到b个对应字符,比如:
\d{1,2}即匹配1或2个数字字符
\d{2,}即匹配至少2个数字字符
符号+功能上等价于{1,}
5. 防止过度匹配
在网络爬虫匹配网页内容时经常出现过度匹配的情况,比如
我们想分别匹配两个, 但结果全部被匹配,这是因为*和+是“贪婪型”元字符,他们会尽可能多的去匹配字符,与此对应的是“懒惰型”元字符,只要在贪婪型后面加上?即可,还是上面的例子,我们再.后面加上?,表达式为<[Bb]>.?</[Bb]>
具体内容参考《正则表达式必知必会》【美】本-福塔