前言:
在學正則表達式之前,有小伙伴講解說,正則表達式在文本處理上功能非常強大、使用非常普遍,并且現在很多的工具軟件都支持它,以后的學習工作中會經常使用,非常靈活,但是靈活的同時又是繁瑣,需要小心翼翼的仔細推敲。抱著認真、好奇的心思聽完了王老的課。我自己理解的正則表達式是,給一些符號賦予一定的涵義,代表一個我們規定的特殊涵義,然后通過我們的要求的字段進行這些字符的組合,組合成符合我們條件的一個字符表達式,然后用這個字符條件表達式去目的文本中對應搜索,有匹配的就顯示標記出來。學習之后,感覺確實非常靈活和強大,各種的文本中會出現的符號都給予了定義,能通過這些字符進行靈活的排列組合,得到我們想要的字段。但是在強大和靈活的同時,感覺又比較繁瑣,各種符號的組合。感覺應該是一個需要經常訓練,熟能生巧的一個知識,就好像上學時候的題海戰術,用的多了,練得多了,見得多了,用起來應該會比較順手和靈活的。自己感覺這個知識點要多做多練多看多學習,由于組合太多,也許能夠通過組合得到相應的目的表達式,但是這么靈活的正則表達式,難道沒有更簡潔更直觀更有趣的排列組合方式嗎,只能通過多看多做多練習,慢慢體味其中排列組合的樂趣。
正則表達式是通過一些特殊字符的排列,用以查找、替換、刪除一行或多行文字字符串,通俗的說,正則表達式就是用在字符串的處理上面的一項“表達式”
在學習正則表達式之前,先看看支持正則表達式的幾個命令,首先是支持基本正則表達式的命令grep,然后是擴展正則表達式egrep和fgrep
一、都支持的常用特殊字符
[:alnum:] 表示所有字母和數字,包括大小寫和數字
[:alpha:] 表示所有字母,包括大小寫
[:lower:] 表示所有小寫英文字母
[:upper:] 表示所有大寫英文字母
[:punct:] 表示所有標點字符
[:digit:] 表示所有數字
[:space:] 表示所有能產生空白的字符,包括空格、tab鍵、CR等
二、基本正則表達式
1、grep
用法 grep [Option] pattern file
這其中的pattern,就是我們通過那些特殊涵義的字符組合出來的條件表達式
常用選項
-i,–ignore-case,忽略字符的大小寫
-v,–invert-match,顯示那些沒有被匹配到的文本
-c,–count,計算匹配到的行數
-o,–only-match,只顯示被匹配到的字段
-n,–line-number,顯示匹配到的行號
-q,–quiet,靜默模式,不輸出匹配信息
-e,實現多個選項之間的邏輯“或”的關系
-A#,–after,顯示匹配到的后#行
-B#,–before,顯示匹配到的前#行
-C#,context,顯示匹配到的前后各#行
-E,egrep
注意:grep在數據中查找一個字符串時,是以整行為單位進行數據選取的,會把含有字符串的行顯示出來,不含有字符串的行不會顯示
2、基本正則表達式元字符
(1)字符匹配
. 匹配任意單個字符
[] 匹配指定范圍之內的任意單個字符
[^] 匹配指定范圍之外的任意單個字符
(2)次數匹配
* 匹配前面的字符任意次數,包括0次
\? 匹配前面的字符0次或1次
\+ 匹配前面的字符至少一次
.* 匹配任意字符任意次數
\{m\} 匹配前面的字符m次
\{m,n\} 匹配前面的字符[m,n]次
\{m, \} 匹配前面的字符[m,+∞)次
\{ ,n\} 匹配前面的字符[0,n]次
(3)位置錨定:定位出現的位置
^ 行首錨定,放在字符的前面,定位字符在行首位置
$ 行尾錨定,放在字符的后面,定位字符在行尾位置
\<或\b 詞首錨定,用在單詞的最左側
\>或\b 詞尾錨定,用在單詞的左右側
^$ 匹配整行為空行
^pattern$ 用于模式匹配整行
\<pattern\>或者\bpattern\b 匹配整個單詞
(4)分組
\(\) 將一個或多個字符捆綁在一起,當作一個整體進行處理,\(pattern\)\+
分組括號中的模式匹配到的內容會被正則表達式引擎記錄與內部的變量中,這些變量的命名方式為:\1,\2…
\1 從左側其,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)
二、egrep及擴展正則表達式
egrep=grep -E
用法: egrep [options] pattern [file]…
擴展正則表達式的原字符
(1)字符匹配
. 匹配任意單個字符
[] 指定范圍的單個字符
[^] 指定范圍之外的單個字符
(2)次數匹配
* 前面字符任意次數,包括0次
? 0次或1次
+ 至少1次,[1,+∞)
{m} 匹配m次
{m,n} 匹配[m,n]次
(3)位置錨定
^ 行首
$ 行尾
\< ,\b 詞首
\> ,\b 詞尾
(4)分組 () ,后向引用 \1 ,\2…
(5)或 邏輯組合 |
a|b = a+b
A|abc = A+abc
(A|a)bc = Abc+abc
原創文章,作者:black_fish,如若轉載,請注明出處:http://www.www58058.com/29478