以下是其他一些示例:
可以使用 {2,} 查找兩次或多次重復(fù) 。regex ^G[o]{2,}gle 匹配 Google、Gooogle、Goooogle 等等 。
重復(fù)修飾符 ?、和 * 分別查找零次或一次、一次或多次,以及零次或多次重復(fù) 。(例如,您可以將 ? 看作是 {0,1} 的簡(jiǎn)寫(xiě)法 。) regex boys? 匹配 boy 或 boys;regex Goo?gle 匹配 Gogle 或 Google 。
regex Goo gle 匹配 Google、Gooogle、Goooogle 等等 。
construct Goo*gle 匹配 Gogle、Google、Gooogle 等等 。
可以將重復(fù)修飾符應(yīng)用到單個(gè)字符(如上所示),還可以應(yīng)用到更復(fù)雜的組合 。使用 ( 和 ) 圓括號(hào)(就像數(shù)學(xué)中的用法)將修飾符應(yīng)用到子表達(dá)式 。下面是一個(gè)示例:給定文本文件 test.txt:The rain in Spain falls mainly
on the the plain.
It was the best of of times;
it was the worst of times.
命令 grep -i -E '(b(of|the)W ){2,}' test.txt 將生成:
on the the plain.
It was the best of of times;
regex 操作符 b 匹配單詞邊界 或 (Ww|wW) 。該 regex 表示“一連串完整單詞‘the’或‘of’后面緊跟非文字字符 。您可能會(huì)提出疑問(wèn),為什么 W是必需的:b 是位于單詞開(kāi)頭或結(jié)尾的空字符串 。在單詞之間必須包括這一(或這些)字符,否則該 regex 將無(wú)法找到匹配 。
捕獲需要注意的內(nèi)容
查找文本是常見(jiàn)的問(wèn)題,但是更常見(jiàn)的問(wèn)題則是希望在找到文本之后將其提取出來(lái) 。換句話說(shuō),您希望去粗取精 。
正則表達(dá)式通過(guò)捕獲 來(lái)提取信息 。如果希望將需要的文本與其他內(nèi)容分開(kāi),請(qǐng)使用圓括號(hào)將模式括起來(lái) 。實(shí)際上,您已經(jīng)使用圓括號(hào)收集術(shù)語(yǔ);在默認(rèn)情況下,圓括號(hào)自動(dòng)進(jìn)行捕獲 。
要查看捕獲,請(qǐng)切換到 Perl 。(grep 實(shí)用工具不支持捕獲,因?yàn)槠淠繕?biāo)是打印包含模式的行 。)
以下命令:
perl -n -e '/^Thes (.*)$/ && print "$1n"' heroes.txt
將打?。?br />
Tick
Punisher
使用命令 perl -e 可以直接從命令行運(yùn)行 Perl 程序 。perl -n 命令針對(duì)輸入文件的每一行運(yùn)行一次程序 。命令的 regex 部分,即位于斜杠之間的文本(/)表示“匹配字符串的開(kāi)頭,然后字母‘T’、‘h’、‘e’后緊跟一個(gè)或多個(gè)空格字符 s,然后捕獲直到字符串結(jié)尾的所有字符 。
Perl 捕獲內(nèi)容被放在以 $1 開(kāi)頭的特殊 Perl 變量中 。Perl 程序的其余部分打印捕獲的內(nèi)容 。
每個(gè)嵌套的括號(hào)對(duì),從左開(kāi)始算起,每個(gè)左圓括號(hào)加一,放在下一個(gè)特殊的數(shù)字變量中 。例如:
perl -n -e '/^(w) -(w )$/ && print "$1 $2"'
將生成:
Spider Man
Ant Man
Spider Woman
捕獲感興趣的文本僅僅是隔靴搔癢 。如果能夠準(zhǔn)確確定材料,就可以使用其他材料改變其外觀 。類(lèi)似于 vi 和 Emacs 的編輯器將模式匹配與替換組合,從而將查找和替換文本組合成一步操作 。還可以使用模式、替換和 sed 從命令行更改文本 。
豐富的主題
正則表達(dá)式非常強(qiáng)大;可供使用的操作符的數(shù)量龐大,種類(lèi)繁多 。它包含如此豐富的信息和實(shí)踐知識(shí),我們?cè)谶@里所能列舉的實(shí)屬鳳毛麟角 。
幸運(yùn)的是,有以下三種優(yōu)秀的正則表達(dá)式理論來(lái)源可供使用:
如果在您的系統(tǒng)上有 Perl,可以參閱 Perl Regular Expression man 頁(yè)面(鍵入 perldoc perlre) 。它會(huì)提供 regex 的精彩介紹,并包含許多有用的示例 。許多編程語(yǔ)言都已采用 Perl 兼容的正則表達(dá)式 (PCRE),因此您在此 man 頁(yè)面讀到的內(nèi)容已被直接轉(zhuǎn)換到 PHP、Python、Java? 和 Ruby 編程語(yǔ)言,以及許多其他最新工具 。
Jeffrey FrIEdl 編著的《正則表達(dá)式》(第三版)被認(rèn)為是 regex 用法方面的圣經(jīng) 。該書(shū)細(xì)致、準(zhǔn)確、清晰、務(wù)實(shí)地說(shuō)明了匹配的工作方式、所有的 regex 操作符、多數(shù)優(yōu)先性(限制和 * 匹配字符的數(shù)量),以及更多內(nèi)容 。此外,F(xiàn)riedl 的書(shū)還包括一些令人驚嘆的正則表達(dá)式,可以準(zhǔn)確地匹配完全限定的電子郵件地址和其他 Request for Comments (RFC) 特定的字符串 。
推薦閱讀
- 對(duì)話 UNIX,第 6 部分: 通過(guò)腳本實(shí)現(xiàn)操作的自動(dòng)化
- 提升UNIX中文件系統(tǒng)使用效率
- SCO UNIX基礎(chǔ)講座--第十一講:TCP/IP 管理
- 什么是第二人格
- 基本配置及操作 SCO UNIX學(xué)習(xí)寶典
- SCOUNIX基礎(chǔ)講座--第八講:監(jiān)視進(jìn)程管理
- Stty使用技巧一則
- SCO UNIX 5.0.4 DAT磁帶機(jī)安裝
- 初識(shí)夏新M350——外觀第一感
- UNIX操作系統(tǒng)的版本與標(biāo)準(zhǔn)
