當(dāng)前位置:首頁>職場> 正則表達(dá)式基本寫法(常用正則表達(dá)式超強(qiáng)整理)
發(fā)布時(shí)間:2024-01-24閱讀( 34)
正則表達(dá)式,又稱規(guī)則表達(dá)式。正則表達(dá)式的英語為:Regular Expression,常簡寫為regex、regexp或RE,是計(jì)算機(jī)科學(xué)中的一個(gè)概念。正則表達(dá)式是一種用來匹配字符串的強(qiáng)有力的武器。它的設(shè)計(jì)思想是用一種描述性的語言來給字符串定義一個(gè)規(guī)則,凡是符合規(guī)則的字符串,我們就認(rèn)為它“匹配”了,否則,該字符串就是不合法的。在很多文本編輯器里,正則表達(dá)式通常被用來檢索、替換那些符合某個(gè)模式的文本,許多計(jì)算機(jī)程序設(shè)計(jì)語言也都支持利用正則表達(dá)式進(jìn)行字符串操作。正則表達(dá)式用于字符串處理、表單驗(yàn)證等場合,實(shí)用高效,所以我們很有必要去掌握它,本文梳理一些工作中常用的正則表達(dá)式,以備不時(shí)之需。

本文通過Linux系統(tǒng)中的grep命令來學(xué)習(xí)正則表達(dá)式,當(dāng)grep與正則結(jié)合在一起時(shí),grep就會(huì)根據(jù)正則表達(dá)式的含義在文本中查找出符合條件的字符串。
位置匹配測試文件1內(nèi)容如下:
# cat reg1hello everyoneI am laoliangLinux helloLinuxI likeLinuxverymuch!

”^”表示錨定行首,匹配輸入字符串的開始位置。比如”^hello”表示只匹配位于行首的hello字符串。

“$”表示錨定行尾,匹配輸入字符串的結(jié)尾位置。比如”hello$”表示只匹配位于行尾的hello字符串。

”^”與”$”分別代表錨定行首與錨定行尾,那么,我們將它們結(jié)合在一起使用,”^Linux$”表示Linux既位于行首,同時(shí)也位于行尾,換句話說,就是整行中只有一個(gè)單詞Linux。

那么”^$”表示什么意思呢?”^$”就表示行首與行尾相連,換句話說就是空行?!?n”參數(shù)可以顯示行號(hào),可以看到第5行空行被匹配到了。

“<”表示錨定詞首?!?lt;lao”表示以lao作為詞首的單詞將會(huì)被匹配到。

”>”表示錨定詞尾。”liang>”表示以liang作為詞尾的單詞將會(huì)被匹配到。

同理,我們也可以將”<“與”>”結(jié)合在一起使用,”<am>”表示當(dāng)am既是詞首又是詞尾時(shí)則會(huì)被匹配到,換句話說,就是當(dāng)am作為一個(gè)獨(dú)立的單詞時(shí),則會(huì)被匹配到。

正則表達(dá)式中,除了”<“與”>”能夠表示錨定詞首與錨定詞尾以外,我們還可以使用””去代替”<“和”>”,””既能錨定詞首,也能錨定詞尾,示例如下:

“B”則與””正好相反,”B”是用來匹配非單詞邊界的,如下”BLinux”表示只要Linux不是詞首就會(huì)被匹配到,同理”LinuxB”表示只要Linux不是詞尾就會(huì)被匹配到。

測試文件2內(nèi)容如下:
# cat reg2a aa aaaaaaaaaabbbab abc abcceaf bf eccfef eef eeefffff

“{n}” 表示前面的字符連續(xù)出現(xiàn)n次,將會(huì)被匹配到。比如”a{2}”表示a連續(xù)出現(xiàn)兩次就會(huì)被匹到。

“{x,y}”表示之前的字符連續(xù)出現(xiàn)的次數(shù)在x與y之間,將會(huì)被匹配到。比如”a{2,4}”表示連續(xù)出現(xiàn)2次,3次,4次a字母將會(huì)被匹配。

“*”表示之前的字符連續(xù)出現(xiàn)任意次數(shù)(包括0次),將會(huì)被匹配到。比如”e*f”表示ef中間e出現(xiàn)任意次將會(huì)匹配。

”.”表示匹配任意單個(gè)字符。比如”ee..”表示ee后面跟隨任意兩個(gè)字符都會(huì)被匹配到,”空格”也算作單個(gè)字符所以也會(huì)被匹配。

”.*”可以理解為”.”與”*”的結(jié)合,表示連續(xù)出現(xiàn)任意次的任意單個(gè)字符,換句話說就是匹配任意長度的任意字符。比如”a.*”表示a字母后面存在任意長度的任意字符都可以被匹配到。

“?”表示匹配其前面的字符0或1次,也就是前面的字符要么沒有要么有一個(gè)。比如”abc?”表示ab后面c出現(xiàn)0次或者1次都會(huì)被匹配到。

“ ”表示匹配其前面的字符至少1次,也就是前面的字符必須有至少一個(gè)。比如”abc ”表示ab后面c至少要出現(xiàn)1次才會(huì)被匹配到。

測試文件3內(nèi)容如下:
# cat reg3 aa123a123ba123$a123bc456abcdefgaBdCeFgaBCDa1a3a#@!

“[[:alpha:]]” 表示匹配任意字母(不區(qū)分大小寫)。比如"a[[:alpha:]]{3}"表示只有a字母后面跟隨了3個(gè)字母的字符串才會(huì)被匹配到。還有一種方式”[a-zA-Z]”也能表示任意字母。

“[[:lower:]]”表示匹配任意小寫字母。比如"a[[:lower:]]{3}"表示只有當(dāng)a后面的3個(gè)字符均為小寫字母時(shí),才會(huì)被匹配到。還有一種方式”[a-z]”也能表示任意一個(gè)小寫字母。

“[[:upper:]]”表示匹配任意大寫字母。比如"a[[:upper:]]{3}"表示只有當(dāng)a后面的3個(gè)字符均為小寫字母時(shí),才會(huì)被匹配到。還有一種方式”[A-Z]”也能表示任意一個(gè)大寫字母。

“[[:digit:]]” 表示匹配任意數(shù)字。比如"a[[:digit:]]{3}"表示只有當(dāng)a后面的3個(gè)字符均為數(shù)字時(shí),才會(huì)被匹配到。還有一種方式”[0-9]”也能表示任意一個(gè)數(shù)字。

“[[:alnum:]]” 表示匹配任意數(shù)字或字母。比如"a[[:alnum:]]{3}"表示當(dāng)a后面的3個(gè)字符為數(shù)字或字母時(shí)會(huì)被匹配到。還有一種方式”[a-zA-Z0-9]”與之等效。

我們可以把上面[[:alpha:]]等拆成兩部分理解:
“[ ]”就表示匹配指定范圍內(nèi)的任意單個(gè)字符的意思。比如"a[bB#3]"表示a后面是b或B或#或3都可以匹配到。

“[^ ]”表示匹配指定范圍外的任意單個(gè)字符,它與”[ ]”的含義正好相反。比如“[^0-9]”表示匹配單個(gè)非數(shù)字字符,與[0-9]的含義這正好相反。

測試文件4內(nèi)容如下:
# cat reg4abca!@#a...bca*bc

“”與正則中的符號(hào)結(jié)合在一起時(shí),就表示這個(gè)符號(hào)本身的含義。比如”.”在正則表達(dá)式中代表任意單個(gè)字符,如果我們需要匹配字母a后面兩個(gè).就需要用到轉(zhuǎn)義符””。

我們需要從ifconfig命令的結(jié)果中找出IPv4格式的IP地址,正則表達(dá)式可以如下進(jìn)行編寫:
([0-9]{1,3}.){3}[0-9]{1,3}

這里可以分為三部分進(jìn)行理解:
這樣我們就匹配出來了IP地址。
以上就是關(guān)于正則表達(dá)式的介紹了,相信在工作中你一定會(huì)用到它!
歡迎分享轉(zhuǎn)載→ http://m.avcorse.com/read-226579.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號(hào)-5 TXT地圖HTML地圖XML地圖