淺談正則表達式

正則表達式又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器裏,正則表達式通常被用來檢索、替換那些符合某個模式的文本。

grep (global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。Unix的grep家族包括grep、egrepfgrep。這裏僅對grep和egrep做簡要示例。


基本格式:

grep [OPTIONS] PATTERN [FILE...]

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

常用命令:


-v: 反向,顯示不能被模式所匹配到的行;

wKiom1MNqiTCZOxNAAFAVpwXr4s811.jpg

-o: 僅顯示被模式匹配到的字串,而非整行;

wKioL1MNqguScIF4AADjUXHOMBs054.jpg

-i: 不區分字符大小寫, ignore-case

wKiom1MNqoizmPoBAACQ6r1bN6Q860.jpg

-A #:之後的幾行字符

wKiom1MNqt6Ag1PpAAENky79Tso666.jpg

-B:之前的幾行字符

wKioL1MNquPB2XlhAADR71mFFRc963.jpg

-n: 顯示匹配行及行號,在顯示出內容的每行前面會顯示行數

wKioL1MNqzzALTlqAADfNyJvcwg306.jpg


基本格式:

“^”錨定行的開始 如:'^grep'匹配所有以grep開頭的行。
“$”錨定行的結束 如:'grep$'匹配所有以grep結尾的行。
“.”匹配一個非換行符('\n')的字符如:'gr.p'匹配gr後接一個任意字符,然後是p。
“*”匹配零個或多個先前字符 如:' *grep' (注意*前有空格)匹配所有零個或多個空格後緊跟grep的行,需要用egrep 或者grep帶上 -E 選項。 .*一起用代表任意字符。“
“[]”匹配一個指定範圍內的字符,如'[Gg]rep'匹配Grep和grep。
“[^]”匹配一個不在指定範圍內的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一個字母開頭,緊跟rep的行。
\(..\)”標記匹配字符,如'\(love\)',love被標記爲1。
“\<”錨定單詞的開始,如:'\<grep'匹配包含以grep開頭的單詞的行。
“\>”錨定單詞的結束,如'grep\>'匹配包含以grep結尾的單詞的行。
“x\{m\}”重複字符x,m次,如:'o\{5\}'匹配包含5個o的行。
“x\{m,\”}重複字符x,至少m次,如:'o\{5,\}'匹配至少有5個o的行。
“x\{m,n\}”重複字符x,至少m次,不多於n次,如:'o\{5,10\}'匹配5--10個o的行。

“\w”匹配文字和數字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G後跟零個或多個文字或數字字符,然後是p。

單詞鎖定符,如: '\bgrep\b'只匹配grep。
用於egrep和 grep -E的元字符擴展集
“+”匹配一個或多個先前的字符。如:'[a-z]+able',匹配一個或多個小寫字母后跟able的串,如loveable,enable,disable等。
“?”匹配零個或一個先前的字符。如:'gr?p'匹配gr後跟一個或沒有字符,然後是p的行。
“a|b|c”匹配a或b或c。如:grep|sed匹配grep或sed
“()”分組符號,如:love(able|rs)ov+匹配loveable或lovers,匹配一個或多個ov。

x{m},x{m,},x{m,n}

[[:alnum:]] 匹配任何一個字母或數字([A-Za-z0-9])

[[:alpha:]] 匹配任何一個字母([A-Za-z])

[[:lower:]] 匹配任何一個小寫字母([a-z])

[[:upper:]] 匹配任何一個大寫字母([A-Z])

[[:space:]] 任何一個空白字符:製表符、空格

[[:punct:]] 任何一個標點符號(不包括:[:alnum:]、[:cntrl:]、[:space:]字符集)


次數匹配:用來指定匹配其前面的字符的次數

*: 任意次(0次或多次)

.*: 匹配任意長度的任意字符

\{m\}: 匹配m次

\{m,n\}:最少匹配m次,最多匹配n次


\{m,\}: 至少m次;

\{0,n\}:至多n次;


分組

\(\)

檢索文件中包含w字符之以es爲組後面接t然後任意字符,組es重複一次的行。


引用:

\1: 後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內容。(後向引用可以有多次,方法\#(#:數字))。



攻城掠地-傲世堂124服

egrep:egrep爲grep的拓展形式,功能比grep強大。比如:grep 不支持 a|b (abc|xyz) 這類", 但是 egrep 支持. grep 在處理 {n,m} , 需用 \{ \} 處理, egrep 則不需.

注:

?: 匹配其前面的字符0或1次;

+: 匹配其前面的字符至少1次

|:表示或關係,比如 'gd|good|dog' 表示有gd,good或dog的串

():將部分內容合成一個單元組。比如要搜索 glad 或 good 可以這樣 'g(la|oo)d',()的好處是可以對小組使用 + ? * 等。

例子:

  • - grep 不支持 a|b 或 (abc|xyz) 這類"或一"比對, 但 egrep 則可


wKioL1MNr2HT8NlDAACSuZPZ5BQ594.jpg



fgrep

不作 RE 處理, 表達式僅作一般字符串處理, 所有 meta 均失去功能.


Ps:由於本人此前無linux經驗,作爲初學者翻閱了大量前人博客,纔對正則表達式有了初步概念。












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章