版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章
正則表達(dá)式9.1什么是正則表達(dá)式9.1.1定義正則表達(dá)式是一個(gè)描述一組字符串的模式。與算術(shù)表達(dá)式類似,正則表達(dá)式也是由各種操作符結(jié)合小的表達(dá)式組成,這些所謂的操作符,即是正則表達(dá)式中的特殊元字符。換句話說(shuō),正則表達(dá)式是由普通字符和元字符組成的字符集,而這個(gè)字符集匹配(或指定)一個(gè)模式。其基本結(jié)構(gòu)單元是匹配單個(gè)字符的正則表達(dá)式。任何帶有特殊含義的元字符可以通過(guò)在字符前加反斜杠‘\’來(lái)引用。正則表達(dá)式的主要作用是文本搜索和字符串處理。一個(gè)正則表達(dá)式匹配單個(gè)字符或一個(gè)字符串,或字符串的一部分。9.1.2正則表達(dá)式類型正則表達(dá)式有兩種類型,分別是:基本正則表達(dá)式擴(kuò)展正則表達(dá)式9.1.2正則表達(dá)式類型基本正則表達(dá)式具有如下的元字符:星號(hào)--*:匹配它前面的字符串或正則表達(dá)式任意次(包括0次)。比如,“1122*”將匹配11+一個(gè)或多個(gè)2,其可能匹配的字符串將是112、1122、1122222、11223343等。句點(diǎn)--.:匹配除換行符之外的任意一個(gè)字符。比如,“112.”將匹配112+至少一個(gè)字符,其可能匹配的字符串是1121、1122、112abc等,但不匹配112。插入符號(hào)--^:匹配一行的開(kāi)始,但有時(shí)依賴于上下文環(huán)境,可能表示否定正則表達(dá)式中一個(gè)字符串的意思。比如,“^abc”將只匹配行首的abc字符串。美元符--$:在一個(gè)正則表達(dá)式的末尾,匹配一行的結(jié)尾。比如,“123$”將只匹配行尾的123,“^$”將匹配一個(gè)空行。方括號(hào)--[]:匹配方括號(hào)內(nèi)指定的字符集中的一個(gè)字符。比如,“[abc]”將匹配字符a、b、c中的任意一個(gè)字符,“[a-h]”將匹配從a到h的任意一個(gè)字符,“[A-Z][a-z]”將匹配任意一個(gè)大寫(xiě)或小寫(xiě)字母,“[^a-d]”將匹配除a到d之外的所有字符。反斜線符號(hào)--\:轉(zhuǎn)義一個(gè)特殊的字符,使這個(gè)字符得到字面意義的解釋。比如,“\$”將表示回它的原意“$”,而不是表示行尾的的正則表達(dá)式含義。類似地,“\\”表示的字意是“\”。轉(zhuǎn)義尖括號(hào)--\<\>:用于標(biāo)記單詞邊界。尖括號(hào)必須是轉(zhuǎn)義的,否則它們只有字符的字面含義。比如,“\<the\>”匹配單詞“the”,但不匹配“them”、“there”、“other”等等。9.1.2正則表達(dá)式類型擴(kuò)展正則表達(dá)式,在上面的基本正則表達(dá)式的元字符的基礎(chǔ)上又增加了幾個(gè)元字符,如下所示:?jiǎn)柼?hào)--?:匹配0個(gè)或1個(gè)前面的字符,它通常用于匹配單個(gè)字符。比如,“ab?c”將匹配“ac”或“abc”。加號(hào)--+:匹配一個(gè)或多個(gè)前面的字符,它和星號(hào)*的作用相似,但它不匹配0個(gè)字符的情況。比如,“ab+c”將匹配“abc”、“abbc”、“abbb…c”等。轉(zhuǎn)義波形括號(hào)--\{\}:指示匹配前面正則表達(dá)式的次數(shù)。波形括號(hào)必須是轉(zhuǎn)義的,否則它們只有字符的字面含義。比如“[0-9]\{5\}”將匹配5位數(shù)字。圓括號(hào)--():包含一組正則表達(dá)式。它們與下面要講的“|”操作符一起使用,或是在使用expr提取子字符串時(shí)使用。豎線--|:正則表達(dá)式的“或”操作符匹配一組可選的字符。比如“a(b|c)d”將匹配“abd”或“acd”。9.1.3POSIX字符類這是一個(gè)指定字符的范圍的替代方法,如表9-1所示。POSIX字符含義[:alnum:]匹配字母和數(shù)字字符。等同于A-Za-z0-9[:alpha:]匹配字母字符。等同于A-Za-z[:blank:]匹配空格或制表符[:cntrl:]匹配控制字符[:digit:]匹配十進(jìn)制數(shù)字。等同于0-9[:graph:]匹配ASCII碼值范圍在33-126的字符。與下面的[:print:]相似,但不包括空格字符[:lower:]匹配小寫(xiě)字母。等同于a-z[:upper:]匹配大寫(xiě)字母。等同于A-Z[:print:]匹配ASCII碼值范圍在32-126的字符。與上面的[:graph:]相似,但多了個(gè)空格字符[:space:]匹配空白字符(空格和水平制表符)[:xdigit:]匹配十六進(jìn)制數(shù)字。等同于0-9A-Fa-f9.1.4Bash正則表達(dá)式比較操作符從Bash的3.0版本開(kāi)始,Bash有了內(nèi)部的正則表達(dá)式比較操作符,使用“=~”表示。大部分使用grep或sed命令的正則表達(dá)式編寫(xiě)腳本的方法現(xiàn)在可以由帶有“=~”操作符的Bash表達(dá)式處理,并且Bash表達(dá)式可能使你的腳本更容易閱讀和維護(hù)。與其它比較操作符(例如,“-lt”或“==”等)相同,如果一個(gè)表達(dá)式(比如,$digit=~"[[0-9]]")左邊的變量匹配右邊的正則表達(dá)式,將返回狀態(tài)碼0,否則返回1。9.2正則應(yīng)用基礎(chǔ)9.2.1實(shí)例:使用句點(diǎn).匹配單字符比如,我們有一個(gè)文件list.txt,其內(nèi)容如下所示:$catlist.txt112211211222221122111abddeabedebbcdebbdde現(xiàn)在我們來(lái)搜索此文件中,包含字符串“112”且其后至少有一個(gè)字符的行.9.2.2實(shí)例:使用插入符號(hào)^匹配例如,我們要查找/etc/passwd文件中root賬號(hào)的信息,如果不使用正則表達(dá)式,而只使用root關(guān)鍵字,可能會(huì)得到類似如下結(jié)果:$greproot/etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin顯然,上述的結(jié)果并不完全是我們需要的結(jié)果。此時(shí),我們使用插入符號(hào)元字符就可以只顯示root賬號(hào)的信息9.2.3實(shí)例:使用美元符$匹配將插入符號(hào)“^”和美元符“$”單獨(dú)結(jié)合使用,可以查找文件中空白行:$grep-v'^$'filename上述示例是打印除空行以外的其它行。使用美元符“$”匹配,我可以查找/etc/passwd中用戶默認(rèn)Shell是Bash的賬號(hào):$grep'bash$'/etc/passwd上述示例中,查找的即是以“bash”字符串結(jié)尾的行。9.2.4實(shí)例:使用星號(hào)*匹配我們?cè)贚inux的系統(tǒng)日志文件/va/log/messages中查找所有匹配“kernel:*”的行:$grep"kernel:*."/var/log/messages上述示例中,將匹配kernel和冒號(hào)“:”,還有緊跟其后0個(gè)或多個(gè)空格,最后是一個(gè)句點(diǎn)“.”匹配任意一個(gè)字符。下面的例子是查找文件中,所有包含單詞是以字母‘i’開(kāi)頭以字母‘l’結(jié)尾的行:$egrep"\<i.*l\>"filename--color或$grep"\<i.*l\>"filename--color9.2.5實(shí)例:使用方括號(hào)[]匹配比如,找出文件中含有至少11個(gè)連續(xù)小寫(xiě)字母的行:$grep"[a-z]\{11\}"/var/log/setup.log--color或$egrep"[a-z]{11}"/var/log/setup.log--color查看文件中包含字母‘b’或字母‘s’的行:$grep[bs]filename查看系統(tǒng)日志文件中包含“數(shù)字+空格+times”的行:$grep"[0-9]\+times"/var/log/messages--color或$egrep"[0-9]+times"/var/log/messages--color9.2.6實(shí)例:使用問(wèn)號(hào)?匹配比如,我們有一個(gè)內(nèi)容如下的文件regexExamp.txt:catregexExamp.txthihellohihellohowareyouhihello我們來(lái)查看一下“hi?hello”的匹配結(jié)果:$egrep"hi?hello"regexExamp.txthihellohihello或$grep"hi\?hello"regexExamp.txthihellohihello9.2.7實(shí)例:使用加號(hào)+匹配我們?nèi)匀皇褂蒙弦还?jié)中示例文件regexExamp.txt,查看“hi+hello”的匹配將是怎樣的結(jié)果:$egrep"hi+hello"regexExamp.txthihellohihellohowareyou或$grep"hi\+hello"regexExamp.txthihellohihellohowareyou9.3小結(jié)下面我們總結(jié)一下本章所學(xué)的主要知識(shí):正則表達(dá)式是一個(gè)描述一組字符串的模式。正則表達(dá)式是由普通字符和元字符組成的字符集,而這個(gè)字符集匹配(或指定)一個(gè)模式。正則表達(dá)式的主要作用是文本搜索和字符串處理。一個(gè)正則表達(dá)式匹配單個(gè)字符或一個(gè)字符串,或字符串的一部分。正則表達(dá)式有兩種類型,分別是基本正則表達(dá)式和擴(kuò)展正則表達(dá)式?;菊齽t表達(dá)式的元字符有:*、.、^、$、[]、\、\<\>擴(kuò)展正則表達(dá)式在基本正則表達(dá)式的元字符
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 一年級(jí)下冊(cè)口算和筆算練習(xí)題
- 第三節(jié) 水資源的合理利用 統(tǒng)一教案
- 《量身高》大班數(shù)學(xué)教案
- 人教版二年級(jí)數(shù)學(xué)上冊(cè)教案【全冊(cè)】
- 班組建設(shè)與領(lǐng)導(dǎo)力提升
- 廣告公司門(mén)衛(wèi)聘用合同
- 燃料消耗數(shù)據(jù)分析
- S版三年級(jí)語(yǔ)文下冊(cè)教案
- 國(guó)際狩獵場(chǎng)硬裝施工合同
- 廚房改造翻新協(xié)議
- 七十歲老人換駕照考三力測(cè)試題庫(kù)
- 2024《整治形式主義為基層減負(fù)若干規(guī)定》全文課件
- 北京市八中2023-2024學(xué)年高二上學(xué)期期中生物試題 含解析
- 設(shè)備包機(jī)制度
- 大體積混凝土養(yǎng)護(hù)方案
- 腦病科優(yōu)勢(shì)病種護(hù)理方案
- 1803綜采工作面供電設(shè)計(jì)
- 水污染控制工程課程設(shè)計(jì)
- 教研員蹲點(diǎn)調(diào)研實(shí)施方案
- 《三只小豬》劇本
- 連續(xù)性內(nèi)部資料出版物準(zhǔn)印證申請(qǐng)表
評(píng)論
0/150
提交評(píng)論