首頁(yè)技術(shù)文章正文

正則表達(dá)式語(yǔ)法之基礎(chǔ)正則表達(dá)式元字符

更新時(shí)間:2022-04-25 來(lái)源:黑馬程序員 瀏覽量:

POSIX規(guī)范制訂了兩種標(biāo)準(zhǔn)的正則表達(dá)式語(yǔ)法,一種是基本正則表達(dá)式,一種擴(kuò)展正則表達(dá)式。這兩中正則表達(dá)式的元字符組成略有不同。本節(jié)來(lái)學(xué)習(xí)基礎(chǔ)正則表達(dá)式元字符。

基礎(chǔ)正則表達(dá)式元字符

(1)限定符“*”

符號(hào)“*”用于匹配前導(dǎo)字符0次或多次,具體示例如下:

hel*o

以上示例中“*”符號(hào)之前是普通字符l,“*”符號(hào)就表示匹配l字符0次或多次,字符串helo、hello、hellllllo都可以與hel*o匹配。

(2)點(diǎn)字符“.”

符號(hào)“.”用來(lái)匹配任意除換行符“\n”外任意的單個(gè)字符。當(dāng)正則表達(dá)式中出現(xiàn)“.”符號(hào)時(shí),意味著該位置應(yīng)有一個(gè)字符,具體示例如下:

..U73.

“.”只能匹配一個(gè)字符,因此上述字符串表示前兩個(gè)字符是任意字符,第3~5個(gè)字符是U73,最后一個(gè)字符也是任意字符。字符串MHU73、4JU73H等都可與..U73.匹配。

(3)行首定位符“^”

符號(hào)“^”用來(lái)匹配行首字符,表示行首字符是“^”后面那個(gè)字符。例如列舉出/etc目錄下以字符串“sys”開(kāi)頭的文件,可以使用如下命令:

[itheima@localhost ~]$ ls /etc | grep "^sys"
sysconfig
sysctl.conf
sysctl.d
systemd
system-release
system-release-cpe

注意:

盡管以上示例匹配的是以字符串“sys”開(kāi)頭的內(nèi)容,但讀者應(yīng)理解為匹配以字符“s”開(kāi)頭,第二、第三個(gè)字符依次為“y”和“s”的行,這種理解方式更符合正則表達(dá)式的思維,。這種思維在學(xué)習(xí)正則表達(dá)式時(shí)非常重要,讀者應(yīng)熟練掌握。

(4)行尾定位符“$”

行尾定位符“$”用來(lái)匹配文本行末尾的字符,與“^”符號(hào)的作用正相反。例如查找/etc目錄下以conf結(jié)尾的文件,可以使用如下命令。

[itheima@localhost ~]$ ls /etc | grep cof$
asound.conf
autofs.conf
autofs_ldap_auth.conf
brltty.conf
cgconfig.conf
cgrules.conf
cgsnapshot_blacklist.conf
......

同樣,讀者在理解行尾定位符的時(shí)候也應(yīng)該從字符的角度去理解,即“conf$”匹配的是以“conf”以字符“f”結(jié)尾,同時(shí)倒數(shù)第2~4個(gè)字符依次為“n”、“o”、“c”的文本行。

(5)字符組“[]”

“[]”符號(hào)的功能比較特殊,它是用來(lái)指定一個(gè)字符集合的,其基本語(yǔ)法如下:

[abc]

其中a、b和c表示任意單個(gè)字符,只要某個(gè)字符串在方括號(hào)所在的位置出現(xiàn)了方括號(hào)中的任意一個(gè)字符,就能滿足匹配規(guī)則。

另外,對(duì)于連續(xù)的數(shù)字或字母可以使用符號(hào)“-”來(lái)表示一個(gè)范圍,例如[a-z],表示匹配到a到z中的任意一個(gè)字母。下面通過(guò)查看/etc目錄下以rc開(kāi)頭,并且rc后面緊跟一個(gè)數(shù)字的文件有哪些來(lái)演示“[]”符號(hào)的使用,查看的命令具體如下所示:

[itheima@localhost ~]$ls /etc | grep "^rc[0-9]" 
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d

由輸出結(jié)果可知,符合規(guī)則的文件一共有7個(gè)。

注意:元字符“*”或“.”位于“[]”符號(hào)之中,便僅表示一個(gè)普通的字符,不再具有特殊意義。

(6)排除型字符組“[^]”

“[^]”表示不匹配其中列出的任意字符,其語(yǔ)法格式如下所示。

[^abc]

它的用法與“[]”符號(hào)相反,此處不再贅述。






分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!