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

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

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

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

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

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

“<”表示錨定詞首。”<lao”表示以lao作為詞首的單詞將會被匹配到。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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