(7)\{n\}
練習(xí)
\{n\}
表示其前面的字符恰好出現(xiàn)n次聋丝。
提示:\{n\}
中的\
表示轉(zhuǎn)義符,下面同理接谨。
如下面一段文本:
Stay hungry, stay foolish. ——Steve Jobs
求知若饑,虛心若愚笼蛛。——喬布斯
Stay hungry, stay folish. ——Steve Jobs
Stay hungry, stay fooolish. ——Steve Jobs
Stay hungry, stay foooolish. ——Steve Jobs
Stay hungry, stay fooooolish. ——Steve Jobs
- 匹配包含三個(gè)連續(xù)的o
執(zhí)行命令:grep "o\{3\}" test2.txt
可以看到有三個(gè)連續(xù)的o弛车,或者包含三個(gè)連續(xù)o齐媒,都會(huì)被匹配到。
那與直接正則匹配三個(gè)o有什么區(qū)別纷跛?
執(zhí)行命令:grep "ooo" test2.txt
原因:
如果是想匹配一個(gè)重復(fù)的字母喻括,直接匹配字母的方式更為方便。
而如果我想要匹配重復(fù)任意字母或者數(shù)字贫奠,則\{n\}
方式更為便捷唬血。
看下面練習(xí)。
- 匹配三個(gè)連續(xù)的數(shù)字
文本
abc adapt 適應(yīng) abc
12a adopt 采用 12345
abc adept 內(nèi)行 XYZ
1b3 floor 地板 7788999
123 flour 面粉 123
執(zhí)行命令:grep "[0-9]\{3\}" test2.txt
我們可以看到唤崭,有三個(gè)連續(xù)的數(shù)字拷恨,或者包含有三個(gè)連續(xù)數(shù)字的文本,都被匹配到了浩姥。
如果我們要是不用
\{n\}
的方式進(jìn)行正則匹配的話挑随,如下:執(zhí)行命令:
grep "[0-9][0-9][0-9]" test2.txt
我們可以看到上邊的命令就會(huì)麻煩很多,如果要是匹配10個(gè)連續(xù)的數(shù)字勒叠,那命令就非常的冗余了兜挨。
字母也是同理的。
-
只匹配三個(gè)連續(xù)的數(shù)字
雖然上面的12345和7788999是包含三個(gè)連續(xù)的數(shù)字眯分,所以也是可以列出的拌汇。
可是這樣不能體現(xiàn)出來(lái)[0-9]\{3\}
只能匹配三個(gè)連續(xù)的數(shù)字,而不是匹配四個(gè)連續(xù)的數(shù)字弊决。
那么正則中就應(yīng)該加入限位(制)符(可以是前后有標(biāo)識(shí)的字符或者是行尾行首等進(jìn)行限位)噪舀,如下:
執(zhí)行命令魁淳,限制行首:grep "^[0-9]\{3\}" test2.txt
或者限制行尾,注意前邊要多加一個(gè)空格限位与倡,才能符合該需求界逛。
執(zhí)行命令:grep " [0-9]\{3\}$" test2.txt
-
用上面一段文本,練習(xí)匹配只包含三個(gè)o的文本纺座。
執(zhí)行命令:grep "fo\{3\}l" test2.txt
說(shuō)明:f和l就是限位(制)符息拜。
注意:
\{n\}
匹配的方式一般不會(huì)用于匹配字母,多用于匹配數(shù)字净响,如電話號(hào)碼少欺。
還要再重復(fù)一遍,正則表達(dá)式是包含匹配馋贤,多注意限位(制)符的使用赞别。
(8)\{n,\}
練習(xí)
\{n配乓,\}
表示其前面的字符出現(xiàn)不小于n次仿滔。
如下面一段文本:
Stay hungry, stay foolish. ——Steve Jobs
求知若饑,虛心若愚∮糖郏——喬布斯
Stay hungry, stay folish. ——Steve Jobs
Stay hungry, stay fooolish. ——Steve Jobs
Stay hungry, stay foooolish. ——Steve Jobs
Stay hungry, stay fooooolish. ——Steve Jobs
比如fo\{4,\}l
這個(gè)正則就會(huì)匹配用f開(kāi)頭堤撵,l結(jié)尾,中間最少有4個(gè)o的字符串羽莺。
執(zhí)行命令:grep "fo\{4,\}l" test2.txt
正則表達(dá)是fo\{4,\}l
與ooooo*
的區(qū)別同上邊(7)\{n\}
同理。
練習(xí):匹配至少連續(xù)5個(gè)字?jǐn)?shù)的文本
abc adapt 適應(yīng) abc
12a adopt 采用 12345
abc adept 內(nèi)行 XYZ
1b3 floor 地板 7788999
123 flour 面粉 123
執(zhí)行命令:grep "[0-9]\{4,\}" test2.txt
(9)\{n洞豁,m\}
練習(xí)
\{n盐固,m\}
匹配其前面的字符至少出現(xiàn)n次,最多出現(xiàn)m次丈挟。
下面一段文本:
Stay hungry, stay foolish. ——Steve Jobs
求知若饑,虛心若愚刁卜。——喬布斯
Stay hungry, stay folish. ——Steve Jobs
Stay hungry, stay fooolish. ——Steve Jobs
Stay hungry, stay foooolish. ——Steve Jobs
Stay hungry, stay fooooolish. ——Steve Jobs
Stay hungry, stay foooooolish. ——Steve Jobs
匹配在字母f和字母l之間有最少3個(gè)o曙咽,最多5個(gè)o蛔趴。
執(zhí)行命令:grep "fo\{3,5\}l" test2.txt
4、總結(jié)
我們學(xué)習(xí)Shell的正則表達(dá)式例朱,實(shí)際的應(yīng)用是什么孝情?
主要是做字符串的模糊匹配,比如要求你輸入一個(gè)手機(jī)號(hào)洒嗤,或者身份證號(hào)箫荡,再或者是一個(gè)郵箱地址等,做模糊匹配渔隶,進(jìn)行錯(cuò)略的過(guò)濾羔挡,來(lái)過(guò)濾掉一些不符合規(guī)則的輸入洁奈。(更細(xì)的驗(yàn)證在后臺(tái)處理,如短信或者郵箱等驗(yàn)證操作)
還有再Shell中我們也常常會(huì)讀取文本中的數(shù)據(jù)绞灼,這些文本中的數(shù)據(jù)也是字符串利术,我們通過(guò)正則表達(dá)式來(lái)過(guò)濾出一些我們需要的數(shù)據(jù)信息。
提示:要注意區(qū)分正則表達(dá)式和通配符中的符號(hào)功能的不同低矮。