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

正则表达式-重复匹配

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.34
1002: $1349.23
1003: $34.23
1004: $345.34
1005: $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>



























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GUI Research Group

谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值