正则表达式入门之重复匹配

来源:互联网 发布:java云计算框架 编辑:程序博客网 时间:2024/06/06 07:48

正则表达式-重复匹配

1.重复匹配

1.1匹配一个或多个字符

要想匹配同一个字符(或字符集合)的多次重复,只要简单地给这个字符(或字符集合)加上一个+字符作为后缀就行了。+匹配一个或多个字符(至少一个:不匹配0个字符的情况)。

例1

比如我想匹配文本里所有的邮箱

#文本

#文本Send e-mail to Tom and Ada, their mailbox is 1944786548@qq.com and .18755518273@163.com, don't forget, Green's mailbox is green.sun@126.com, and finally my mailbox, ben@urgent.forta.com

#正则表达式\w+@\w+\.\w+

#结果

Send e-mail to Tom and Ada, their mailbox is 1944786548@qq.com and .18755518273@163.com,

don't forget, Green's mailbox is green.sun@126.com, and finally my mailbox,ben@urgent.forta.com

正则表达式匹配了4个邮箱,但其中两个不够完整,还有一个是错误的邮箱。(邮箱地址可以有任意多个字符,但第一个字符必须是一个字母或数字字符)下面我们学习另一种元字符来完成我们的任务。

1.2匹配零个或多个字符

+匹配一个或多个字符,但不匹配0个字符,如果我们想匹配一个可有可无的字符,也就是这个字符可以出现0次或多次,那么我们就需要用*元字符来完成匹配。

例1

#文本Send e-mail to Tom and Ada, their mailbox is 1944786548@qq.com and .18755518273@163.com, don't forget, Green's mailbox is green.sun@126.com, and finally my mailbox, ben@urgent.forta.com
#正则表达式\w+[\w.]*@[\w.]+\.\w+

#结果

Send e-mail to Tom and Ada, their mailbox is 1944786548@qq.com and .18755518273@163.com,

don't forget, Green's mailbox is green.sun@126.com, and finally my mailbox,ben@urgent.forta.com

现在我们可以看到4个邮箱都正确的匹配了。

1.3匹配零个或一个字符

?元字符,只能匹配一个字符(或字符集合)的零次或一次出现,最多不超过一次。

例1

#文本The URL is http://www.forta.com/,to connect securely use https://www.forta.com/ instead.
#正则表达式https?://[\w./]+

#结果

The URL is http://www.forta.com/,to connect securely 

use https://www.forta.com/instead.

https?可以匹配https也可以匹配http达到了我们想要的效果。

 

2.匹配的重复次数

想要指定重复次数,就需要{}元字符给出。比如,{3}意味着模式里的前一个字符或字符集合必须在原始文本中连续出现3次才算一个匹配。{2,4}的含义是最少重复2次,最多重复4次。{3,}表示至少重复3次。

例1

我们想找出金额大于$100的订单

#文本1001: $123.341002: $1349.231003: $34.231004: $345.341005: $91.34
#正则表达式\$\d{3,}\.\d{2}

#结果

1001: $123.34

1002: $1349.23

1003: $34.23

1004: $345.34

1005: $91.34

3防止过度匹配

例1


#文本<B>AK</B> and <B>HI</B>
#正则表达式<B>.*</B>

#结果

<B>AK</B>and <B>HI</B>

上述结果将<B>AK</B> and <B>HI</B>全部匹配了,这是因为第一个<B>到最后一个</B>之间的所有东西都被.*一网打尽。造成这样的原因是*和+都是所谓的”贪婪型”元字符,他们在进行匹配时,是多多益善而不是适可而止。这时我们需要使用这些元字符的”懒惰型“。

贪婪型

懒惰型

*

*?

+

+?

{n,}

{n,}?


例2

#文本<B>AK</B> and <B>HI</B>
#正则表达式<B>.*?</B>

#结果

<B>AK</B> and <B>HI</B>



























原创粉丝点击