正則表達式和正規式,java正則出現次數_正則表達式(二)—匹配次數的正則

 2023-11-11 阅读 18 评论 0

摘要:正則表達式匹配次數的正則正則表達式和正規式。在前一篇文章中,我們總結了和位置相關的正則,在這篇文章中,我們將繼續學習正則表達式其它的內容。假如現在給你一個regular_1.txt文件,讓你找出含有連續2個a的行,應該怎么查找?這還不

正則表達式

匹配次數的正則

正則表達式和正規式。在前一篇文章中,我們總結了和位置相關的正則,在這篇文章中,我們將繼續學習正則表達式其它的內容。

假如現在給你一個regular_1.txt文件,讓你找出含有連續2個a的行,應該怎么查找?這還不簡單嘛,cat ?regular_1.txt? | grep "aa" ;很好,現在換成另一個問題:找出含有連續100個a的行?。難道在命令中連續寫上100個a ?顯然太累人了。

我們完全可以利用正則解決上面這個問題,這就是這篇文章主要講述的內容。老規矩,還是先給出測試需要用到原始文件的內容。

68bfdf3476ef0c6acd06a67b23f67ce1.gif

java 正則表達式不能匹配。1

{m}

{m}?表示匹配前面字符m次,也就是說前面字符出現m次的行會被匹配,好了,實驗一把吧,查找regular_1.txt?文件中a連續出現2次的行。

68bfdf3476ef0c6acd06a67b23f67ce1.gif

正則表達式結果再次正則,看到沒,好家伙,一下輸出了這么多行,只要是連續出現了2次a以上的行都會被匹配上,這個世界究竟怎么了?我明明只是想要連續出現兩次a的行就可以了,干嘛給我返回這么多。其實很簡單。連續3個a就已經包含了連續2個a,肯定能匹配上。再看看第5行,連續4個a包含了2次連續2個a,相當于第5行匹配上了2次。

現在我們可以很輕松的寫出下面這樣的命令來找出文件中含有連續100個a的行 ?:

cat ?regular_1.txt? | grep "a{100}"

2

{m,}

{m,}?至少匹配前面字符m次,好了,我們再來查找regular_1.txt?文件中a連續?出現2次以上的行。

68bfdf3476ef0c6acd06a67b23f67ce1.gif

咋一看,好像和上面的輸出結果沒什么區別啊,但是仔細看看第4、6行,還是有些許不同的,以第3行為例,{2}形式匹配的時候第3行被匹配上是因為連續包含了2個a被匹配上,因此輸出中最后的a沒有顏色;而{2,}形式第3行被匹配上是因為連續包含了3個a才被匹配上。果相同但因卻不一樣。

3

{m,n}

{m,n}?匹配前面字符?最少m次,最多m次都可以,好了,我們再來查找regular_1.txt?文件中a連續?出現2次到3次的行。

68bfdf3476ef0c6acd06a67b23f67ce1.gif

至于第6行含有連續5個a為什么能被匹配上,通過前面的分析我想大家應該知道原因吧。

4

*

*表示其前面的字符連續出現任意次,這個任意當然包括0次了,也包括多次,好了,現在我們用*來匹配測試下。

68bfdf3476ef0c6acd06a67b23f67ce1.gif

68bfdf3476ef0c6acd06a67b23f67ce1.gif

可以看出,原始文件中無論有多少個a都被匹配出,盡管第1行不含a字符,但還是匹配出來了。

5

?

?表示其前面的字符連續出現0次或者1次,下面我們用它來匹配regular_1.txt文件中出現0次或者1次的行。

68bfdf3476ef0c6acd06a67b23f67ce1.gif

看到上面的結果嗎,竟然和*匹配的結果是一樣的,盡管結果一樣,但是匹配的原理是不同的。以第3行為例,如果使用*匹配,則第3行是以因為其連續含有2個a被匹配上的;而如果是以?匹配,則第3行被匹配上是因為先匹配了上1個a,再匹配上后面的a,相當于匹配上了2次。所以有時候看事務是不能只看表面的。

6

+

+?表示其前面的字符連續出現1次或者多次,也就是說,+前面的字符至少要連續出現一次才能匹配上。如果我們需要查找文件中出現過a字符的行,我們可以使用下面的命令。

68bfdf3476ef0c6acd06a67b23f67ce1.gif

總結

主要總結了正則表達式中關于次數匹配相關的正則,后面還會總結正則表達式其它的規則,希望對大家有所幫助,文章中如有遺漏或錯誤之處,還望大家指出!

推薦閱讀:

專注服務器后臺技術棧知識總結分享

歡迎關注交流共同進步

68bfdf3476ef0c6acd06a67b23f67ce1.gif

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/170496.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息