正则表达式入门之重复匹配
正則表達式-重復(fù)匹配
1.重復(fù)匹配
1.1匹配一個或多個字符
要想匹配同一個字符(或字符集合)的多次重復(fù),只要簡單地給這個字符(或字符集合)加上一個+字符作為后綴就行了。+匹配一個或多個字符(至少一個:不匹配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+
#結(jié)果
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個郵箱,但其中兩個不夠完整,還有一個是錯誤的郵箱。(郵箱地址可以有任意多個字符,但第一個字符必須是一個字母或數(shù)字字符)下面我們學(xué)習(xí)另一種元字符來完成我們的任務(wù)。
1.2匹配零個或多個字符
+匹配一個或多個字符,但不匹配0個字符,如果我們想匹配一個可有可無的字符,也就是這個字符可以出現(xiàn)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+#結(jié)果
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
現(xiàn)在我們可以看到4個郵箱都正確的匹配了。
1.3匹配零個或一個字符
?元字符,只能匹配一個字符(或字符集合)的零次或一次出現(xiàn),最多不超過一次。
例1
#文本 The URL is http://www.forta.com/,to connect securelyuse https://www.forta.com/ instead. #正則表達式 https?://[\w./]+#結(jié)果
The URL is http://www.forta.com/,to connect securely?use https://www.forta.com/instead.
https?可以匹配https也可以匹配http達到了我們想要的效果。
?
2.匹配的重復(fù)次數(shù)
想要指定重復(fù)次數(shù),就需要{}元字符給出。比如,{3}意味著模式里的前一個字符或字符集合必須在原始文本中連續(xù)出現(xiàn)3次才算一個匹配。{2,4}的含義是最少重復(fù)2次,最多重復(fù)4次。{3,}表示至少重復(fù)3次。
例1
我們想找出金額大于$100的訂單
#文本 1001: $123.34 1002: $1349.23 1003: $34.23 1004: $345.34 1005: $91.34 #正則表達式 \$\d{3,}\.\d{2}#結(jié)果
1001: $123.34
1002: $1349.23
1003: $34.23
1004: $345.34
1005: $91.343防止過度匹配
例1
#文本 <B>AK</B> and <B>HI</B> #正則表達式 <B>.*</B>
#結(jié)果
<B>AK</B>and <B>HI</B>上述結(jié)果將<B>AK</B> and <B>HI</B>全部匹配了,這是因為第一個<B>到最后一個</B>之間的所有東西都被.*一網(wǎng)打盡。造成這樣的原因是*和+都是所謂的”貪婪型”元字符,他們在進行匹配時,是多多益善而不是適可而止。這時我們需要使用這些元字符的”懶惰型“。
| 貪婪型 | 懶惰型 |
| * | *? |
| + | +? |
| {n,} | {n,}? |
例2
#文本 <B>AK</B> and <B>HI</B> #正則表達式 <B>.*?</B>#結(jié)果
<B>AK</B> and <B>HI</B>
總結(jié)
以上是生活随笔為你收集整理的正则表达式入门之重复匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R语言之MYSQL数据库获取及输出
- 下一篇: 正则表达式入门之位置匹配