更新時(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á)式元字符
符號(hào)“*”用于匹配前導(dǎo)字符0次或多次,具體示例如下:
hel*o
以上示例中“*”符號(hào)之前是普通字符l,“*”符號(hào)就表示匹配l字符0次或多次,字符串helo、hello、hellllllo都可以與hel*o匹配。
符號(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.匹配。
符號(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)熟練掌握。
行尾定位符“$”用來(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”的文本行。
“[]”符號(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è)普通的字符,不再具有特殊意義。
“[^]”表示不匹配其中列出的任意字符,其語(yǔ)法格式如下所示。
[^abc]
它的用法與“[]”符號(hào)相反,此處不再贅述。