1. 程式人生 > >linux學習-正則表達式基礎

linux學習-正則表達式基礎

例如 正則表達式 aac 查找 括號 col 可能 bcd 邊界

“.”符號

點符號用於匹配除換行符之外的任意一個字符。例如:r.t可以匹配rot rut,但是不能匹配root,若使用r..t就可以匹配root、ruut、r t(中間是兩個空格)等。下面的例子是從/etc/passwd中搜索出“包含r,緊跟著兩個字符,後面在接t”的行。

grep ‘r..t‘ /etc/passwd

技術分享圖片

“”符號

“”符號用於匹配前一個字符0次或者任意多次,比如ab,可以匹配a,ab,abb等。“”符號經常和“.”符號在一起使用。比如“.”代表任意長度的不包含換行的字符。下面的例子是試圖找到連續的r字母緊跟著字母t的行。由於在/etc/passwd中沒有rt,rrt這樣的匹配,所以該表達式實際上只找出了包含t的行(r匹配了0次)

grep ‘r..t‘ /etc/passwd

技術分享圖片
如果把上面的‘rt’換成‘r.t’,代表查找包含字母r,後面緊跟任意長度的字符,再跟一個字母t的行。如下所示:

grep ‘r.*t‘ /etc/passwd

技術分享圖片

“\{n,m\}”符號

雖然“”可用於重復匹配前一個字符,但卻不能精確地控制匹配的重復次數,使用“{n,m}”符號則能更加靈活地控制字符重復的次數:
\{n,\} 匹配前面的字符n次,下列匹配的是包含root的行(r和t包含兩個o)

grep ‘r.*t‘ /etc/passwd
技術分享圖片

{n,} 匹配前面的字符至少n次以上(含n次)

grep ‘ro\{0,\}t‘ /etc/passwd

技術分享圖片

“^”符號

匹配開頭的字符,例如“^root”匹配的是以字母root開始的行
grep ‘^root‘ /etc/passwd

技術分享圖片

“$”符號

此符號用於匹配尾部,例如“abc$”代表以abc結尾的行。如果是"^$"則代表為空,因為^和$之間什麽都沒有。下面匹配的是以r開頭,中間有一串任意字符,以h結尾的行。

grep ‘^r.*h$‘ /etc/passwd

技術分享圖片

“[]”符號

用於匹配方括號內出現的任一字符。比如單項選擇題的答案,可能是A,B,C,D選項的任一種,用正則表達式就是[ADCD]。如果遇到比較大範圍的匹配,比如說要是匹配任意一個大寫字母,就需要使用“-”號做範圍限定,寫成[A-Z],要匹配所有的字母則寫成[A-Za-z]

以匹配手機號為例,手機號是11位連續的數字,第一位一定是1,所以表示為“^1”;第二位可能是3(移動)或者8(聯通),表示為“[38]”;後續9個任意數字,表示為‘[0-9]’,所以整個表達式寫為“^1[38][0-9]{9}”

"\<"和“\>”

這兩個符號分別用於界定單詞的左邊界和右邊界。比如“\<hello”用於匹配hello開頭的單詞,而“hello\>”用於匹配hello結尾的單子。可以使用“\<hello\>”精確匹配hello這個單詞

“\d”

匹配一個數字,等價於[0-9]

其他符號說明

\b 匹配單詞的邊界
\B 匹配非單詞的邊界
\w 匹配字母、數字和下劃線,等價於[A-Za-z0-9]
\W匹配非字母、非數字、非下劃線等價於[^A-Za-z0-9]
\n 匹配換行符
\r 匹配回車符
\t 匹配制表符
\f 匹配換頁符
\s 匹配任何空白字符
\S 匹配任何非空白字符

linux學習-正則表達式基礎