第五章:重复匹配
Posted changlezhong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五章:重复匹配相关的知识,希望对你有一定的参考价值。
5.1 有多少个匹配:
5.5.1 匹配一个或多个字符:
想要匹配同一个字符(或字符集合)的多次重复,只要简单的给这个字符(或字符集合)加上一个+字符作为后缀即可。
+ : 表示匹配一个或多个字符,比如[0-9]表示匹配任意单个数字,[0-9]+将匹配一个或多个连续的数字
注意:
在给字符集合加上+后缀的时候,必须把+放在字符集合的外边,比如说[0-9]+是正确的匹配一个或多个连续的数字,而[0-9+]只是匹配一个单个的数字或加号
文本:
Send personal email to [email protected] For qwestions about a book user [email protected] Feel free to send unsolicited email to [email protected] (wouldn‘t it be nice if it were that simple, huh?)
正则表达式:
\[email protected]\w+\.\w+
结果:
Send personal email to [email protected]. For qwestions about a book user [email protected]. Feel free to send unsolicited email to [email protected] (wouldn‘t it be nice if it were that simple, huh?)
注意:
+是一个元字符,要相匹配+本身,就必须使用它的转义序列 \+
再看一个例子:
文本:
Send personal email to [email protected] or [email protected] For qwestions about a book user [email protected] Feel free to send unsolicited email to [email protected] (wouldn‘t it be nice if it were that simple, huh?)
正则表达式:
\[email protected]\w+\.\w+
结果:
Send personal email to [email protected] or ben.[email protected]. For qwestions about a book user [email protected]. Feel free to send unsolicited email to [email protected] (wouldn‘t it be nice if it were that simple, huh?)
分析:
[email protected]未正确匹配
调整后的正则表达式:
[\w.][email protected][\w.]\.\w+
注意:
当在字符集合([])里使用的时候,像.和+这样的元字符将被解释成普通字符,不需要转义,但转义也没有关系。[\w.] 和 [\w\.]是等价的
5.1.2 匹配零个或多个字符:
+匹配一个或多个字符,但不匹配零个字符,+最少也要匹配一个字符,那要想匹配一个可有可无的字符,该使用*元字符来完成
文本:
Hello [email protected] is my email address.
正则表达式:
[\w.][email protected][\w.]\.\w+
结果:
Hello [email protected] is my email address.
正确的正则表达式:
[\w.]*@[\w.]\.\w+
结果:
Hello .[email protected] is my email address.
注意:
*是一个元字符,要想匹配*本身需要对其进行转义
5.1.3 匹配零个或一个字符:
?只能匹配一个字符(或字符集合)的零次或一次出现
文本:
The URL is http://www.forta.com, to connect securely user https://www.forta.com/ instead.
正则表达式:
http://[\w./]+
结果:
The URL is http://www.forta.com, to connect securely user https://www.forta.com/ instead.
在http后加一个s*并不能解决问题,因为httpssss://这种事非法的url
正确的正则表达式:
https?://[\w./]+
结果:
The URL is http://www.forta.com, to connect securely user https://www.forta.com/ instead.
注意:
?是一个元字符,要想匹配*本身需要对其进行转义
拓展:
之前说过在Windows系统下匹配空行为 \r\n\r\n,在linux系统下匹配空行为 \n\n,那想写出在Windows和linux系统下通用的空行匹配正则表达式该怎么写呢:
[\r]?\n[\r]?\n
5.2 匹配的重复次数:
我们学过+,*和?,但这并不能对重复性匹配有一个精确的控制,所以在正则表达式中提供了一个用来设定重复次数的语法,重复次数要用 { 和 } 字符来给出,把重复的次数卸载它们之间即可
注意:
{ 和 }是元字符,要想匹配他们本身需要对他们进行转义
5.2.1 为重复匹配设定一个精确的值:
文本:
#123456 #12345 #1234567
正则表达式:
#\d{6}
结果:
#123456 #12345 #1234567
5.2.2 为重复匹配次数设定一个区间:
{}语法还可以为重复次数设定一个区间,也就是设定一个重复匹配的最小值和最大值,{2,4}表示最少重复2次,最多重复4次
文本:
4/8/03
10.6.2004
2/2/2
01-01-01
正则表达式:
\d{1,2}[-\/\]\d{1,2}[-\/]\d{2,4}
结果:
4/8/03
10.6.2004
2/2/2
01-01-01
注意:
在上面的例子中,匹配 / 的时候我们使用了转义序列 \/
5.2.3 匹配“至少重复多少次”
使用 {3,} 来表示至少重复3次或更多次
文本:
1001:$496.80
1002:$1290.69
1003:$26.43
1004:$613.42
1005:$7.61
1006:$414.90
1007:$25.00
正则表达式:
\d+:\$\d{3,}\.\d{2}
结果:
1001:$496.80
1002:$1290.69
1003:$26.43
1004:$613.42
1005:$7.61
1006:$414.90
1007:$25.00
5.3 防止过度匹配:
文本:
<B>AK</B> and <B>HI</B>
正则表达式:
<Bb>.*</Bb>
结果:
<B>AK</B> and <B>HI</B>
分析:
+和*属于“贪婪型”元字符,他们在匹配的时候是多多益善而不是适可而止,当你不需要这种“贪婪行为”时,你就需要使用这些元字符的“懒惰型”版本,即在贪婪型元字符后面加一个?即可。
懒惰型正则表达式:
<Bb>.*?</Bb>
结果:
<B>AK</B> and <B>HI</B>
以上是关于第五章:重复匹配的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud(Hoxton.SR3)基础篇:第五章Hystrix-request collapsing(请求合并)