1. 匹配一个或多个字符(+)

要想匹配某个字符(或字符集合)的一次或多次重复,只要简单地在其后面加上一个+字符。+匹配至少一个字符,比如要匹配以下电子邮箱

ben@forta.com

support@forta.com

spam@forta.com

正则表达式为:\w+@\w+.\w+

说明:第一个\w+匹配@符号前的字符串,@不是元字符所以不需要转义,第二个\w+匹配紧跟@后面,点前面的字符串,\.匹配.,第三个\w+匹配点后面的字符串

java正则表达式如何匹配多次 正则表达式 匹配多次_元字符


再比如如下邮箱:

ben@forta.com

ben.forta@forta.com

support@forta.com

ben@urgent.forta.com

spam@forta.com

java正则表达式如何匹配多次 正则表达式 匹配多次_java正则表达式如何匹配多次_02


用之前的表达式就不能完全匹配,可以修改为:[\w.]+@[\w.]+.\w+

java正则表达式如何匹配多次 正则表达式 匹配多次_字符串_03

2. 匹配零个或多个字符 (*)

如果要匹配零个或多个字符用字符*,和+d 用法完全一样
.forta@forta.com对于电子邮箱来说,第一个点是不需要的,用+匹配就会出问题,如果不想匹配第一个点可以修改表达式为:\w+[\w.]
@[\w.]+.\w+

java正则表达式如何匹配多次 正则表达式 匹配多次_正则表达式_04


这样第一个点就不会被匹配了。

3.匹配零个或一个字符(?)

如果一个字符只允许出现0次或1次,可用符号?来匹配,对于URL地址有两类文本:http://和https://,对于如下两个网址,如果都想匹配,可用表达式: https?😕/[\w./]+

The URL is http://www.forta.com/

The URL is https://www.forta.com/

java正则表达式如何匹配多次 正则表达式 匹配多次_java正则表达式如何匹配多次_05


说明:?号前面的字符或字符集合只能出现0次或1次。

4. 匹配的重复次数

在某些情况下,我们需要匹配字符串出现的具体次数,此时可在相应表达式后面加上符号{a,b},表示匹配a到b个对应字符,比如:
\d{1,2}即匹配1或2个数字字符
\d{2,}即匹配至少2个数字字符
符号+功能上等价于{1,}

5. 防止过度匹配

在网络爬虫匹配网页内容时经常出现过度匹配的情况,比如

java正则表达式如何匹配多次 正则表达式 匹配多次_字符串_06


我们想分别匹配两个, 但结果全部被匹配,这是因为*和+是“贪婪型”元字符,他们会尽可能多的去匹配字符,与此对应的是“懒惰型”元字符,只要在贪婪型后面加上?即可,还是上面的例子,我们再.后面加上?,表达式为<[Bb]>.?</[Bb]>

java正则表达式如何匹配多次 正则表达式 匹配多次_字符串_07


具体内容参考《正则表达式必知必会》【美】本-福塔