常用正則表達式


 

一.常用符號

字符

實例

說明

備注

\

$ ( ) * + . ? [ \ ^ { |      \a\e\f\n\r\t\v

“\\”匹配”\”,”\(“匹配”(“,”\t”代表換行。

將下一字符標記為特殊字符、文本、反向引用或八進制轉義符。

 

^

 

匹配輸入字符串開始的位置。

定位符

$

 

匹配輸入字符串結尾的位置。

\<

 

匹配單詞首。

\>

 

匹配單詞尾。

\b

“er\b”匹配“never”中的“er”,但不匹配“verb”中的“er”,“\bend\b”僅匹配“end”。

匹配一個字邊界,即字與空格間的位置。

\B

“er\B”匹配“verb”中的“er”,但不匹配“never”中的“er”。

非字邊界匹配。

*

zo* 可匹配“z”、“zoo”,* 等效於 {0,}。

零次或多次匹配前面的字符或子表達式。

限定符

+

“zo+”與“zo”和“zoo”匹配,但與“z”不匹配,+ 等效於 {1,}。

一次或多次匹配前面的字符或子表達式。

?

“do(es)?”匹配“do”或“does”中的“do”,? 等效於 {0,1}。

 

 

在字符串“oooo”中,“o+?”只匹配單個“o”,而“o+”匹配所有“o”。

零次或一次匹配前面的字符或子表達式。當此字符緊隨任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后時,匹配模式是“非貪心”,也即匹配搜索到的、盡可能短的字符串。而默認的“貪心”模式匹配搜索到的、盡可能長的字符串。

{n}

“o{2}”與“Bob”中的“o”不匹配,但與“food”中的兩個“o”匹配。

n 是非負整數,正好匹配 n 次。

{n,}

“o{2,}”不匹配“Bob”中的“o”,而匹配“foooood”中的所有 o。

n 是非負整數。至少匹配 n 次。

{,n} 

“o{,3}”不匹配“Boooob”中的“o”,而匹配“food”中的所有 o。

n 是非負整數。最多匹配 n 次。

{n,m}

“o{1,3}”匹配“fooooood”中的頭三個 o。
注意:不能將空格插入逗號和數字之間。

m 和 n 是非負整數,其中 n <= m。匹配至少 n 次,至多 m 次。

.

 

注意:若要匹配包括“\n”在內的任意字符,請使用諸如“[\s\S]”之類的模式。

匹配除“\n”之外的任何單個字符。

 

x|y

'z|food' 匹配‘z’或‘food’。'(z|f)ood' 匹配‘zood’或‘food’。

匹配 x 或 y。

 

[xyz]

‘[abc]’匹配‘plain’中的‘a’。

匹配字符集內包含的任一字符。

[^xyz]

‘[^abc]’匹配‘plain’中的‘p’。

反向匹配。匹配字符集內未包含的任何字符。

[a-z]

“[a-z]”匹配“a”到“z”范圍內的任何小寫字母。

字符范圍。匹配指定范圍內的任何字符。

[^a-z]

“[^a-z]”匹配任何不在“a”到“z”范圍內的任何字符。

反向范圍字符。匹配不在指定的范圍內的任何字符。

\d

等效於 [0-9]。

數字字符匹配。

 

\D

等效於 [^0-9]。

非數字字符匹配。

\w

與“[A-Za-z0-9_ ]”等效。

任意一個字母或數字或下划線,也就是A~Z,a~z,0~9,_中任意一個。

\W

與“[^A-Za-z0-9_ ]”等效。

與任何非單詞字符匹配。

\x

等同於[0-9A-Fa-f]。

匹配十六進制數字。

\X

等同於[^0-9A-Fa-f]。

匹配非十六進制數字。

\s

等效於[\f\n\r\t\v]。

匹配任何空白字符,包括空格、制表符、換頁符等。

\S

等效於[^ \f\n\r\t\v]。

匹配任何非空白字符。

\f

等效於 \x0c 和 \cL。

換頁符匹配。

不可打印字符

\n

等效於 \x0a 和 \cJ。

換行符匹配。

\r

等效於 \x0d 和 \cM。

匹配一個回車符。

\t

等效於\x09 和 \cI。

制表符匹配。

\v

等效於\x0b 和 \cK。

垂直制表符匹配。

( )

'(z|f)ood' 中表達式匹配的文本時z和f。

用括號來“記住”子表達式匹配的文本

 

-

[-A-Z0-9a-z._?+]該例表示匹配-,所有字母,所有數字,點,下划線,問號,加號;

連字符。若要匹配連字符,就必須把連字符放在集合的最前面。

 

|

若要匹配grey或者gray,可以寫成
gr[ea]y或者grey|gray亦或者gr(e|a)y

另外,若想匹配Grey或者grey,可以寫成(G|g)rey,也可在grep的時候加上參數-i

或。‘|’前后字符都滿足條件。

 

&

s/.*/&test/g表示在每行的末尾加上一個字符串test。&代表.*所匹配的字符串值。

在替換字符串中,符號&代表正則表達式所匹配的字符串的值。

&

\num

(.)\1匹配兩個連續的相同字符。

([a-z])([0-9])\1\2    其中\1代表[a-z]匹配的內容,而\2代表[0-9]

此處的num是一個正整數。用數字來表示第number個括號所代表的子表達式

 

              

二.常用正則表達式

  1. 查找重復單詞:grep –i ‘\<([a-z]+) +\1\>’ files
  2. 刪除空行:sed "/^\s*$/d" filename >newfile
  3. 匹配所有:.*
  4. Html和css中的十六進制值:^#?([a-f0-9]{6}|[a-f0-9]{3})$
  5. 電子郵箱:^([a-z0-9_.-]+)@([ a-z 0-9.-]+)\.([a-z.]{2,6})$
  6. URL:^(https?:\/\/)?([0-9a-z.-]+)\.([a-z.]{2,6})([\/\w .-]*)*\/?$
  7. IP 地址

[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

  1. HTML 標簽:<(.*)>.*<\/\1>|<(.*) \/>
  2. 首尾空格:(^\s*)|(\s*$) 或者 /^\s*$/  匹配空行。
  3. 去掉所有的行尾空格:“:%s/\s\+$//”。

“%”表示在整個文件范圍內進行替換,“\s”表示空白字符(空格和制表符),“\+” 對前面的字符匹配一次或多次;“$”匹配行尾;“//”被替換的內容為空;由於一行最多只需替換一次,不需要特殊標志g。

  1. 去掉所有的空白行:“:%s/\(\s*\n\)\+/\r/”。

這回多了“\(”、“\)”、“\n”、“\r”和 “*”。“*”代表對前面的字符(此處為“\s”)匹配零次或多次;“\n”代表換行符;“\r”代表回車符;“\(”和“\)”對表達式進行分組,使其被視作一個不可分割的整體。因此,這個表達式的完整意義是,把連續的換行符(包含換行符前面可能有的連續空白字符)替換成為一個單個的換行符。唯一很特殊的地方是,在模式中使用的是“\n”,而被替換的內容中卻不能使用“\n”,而只能使用“\r”。

  1. 去掉所有的“//”注釋:“:%s!\ s*//.*!!”

這里的分隔符改用了“!”,原因是在模式或字符串部分使用了“/”字符,不換用其他分隔符的話就得在每次使用“/”字符本身時寫成“\/”,上面的命令得寫成“:%s/\s*\/\/.*//”,可讀性較差低。

  1. 去掉所有的“/* */”注釋:“:%s!\s*/\*\_.\{-}\*/\s*! !g”

“\_.”匹配包含換行在內的所有字符;“\{-}”表示前一個字符可出現零次或多次,但在整個正則表達式可以匹配成功的前提下,匹配的 字符數越少越好;標志“g”表示一行里可以匹配和替換多次。替換的結果是個空格的目的是保證像“int/* space not necessary around comments */main()”這樣的表達式在替換之后仍然是合法的。

  1. 將 data1 data2 修改為 data2 data1::s/\(\w\+\)\s\+\(\w\+\)/\2\t\1   
  2. 將 Doe, John 修改為 John Doe::%s/\(\w\+\), \(\w\+\)/\2 \1/    
  3. 將各行的id字符串替換為行號::%s/\<id\>/\=line(".")   
  4. 將每行開頭的單詞替換為(行號-10).單詞的格式,

如將第11行的word替換成1. word::%s/\(^\<\w\+\>\)/\=(line(".")-10) .".". submatch(1)

在函數式中可以使用 submatch(1)、submatch(2) 等來引用\1、\2等的內容,而submatch(0)可以引用匹配的整個內容。

  1. 排序 :/OB/+1,$!sort

三.正則表達式在Linux命令中的使用規則

  1. vim

文本查找 /pattern

文本替換 :%s/pattern/replacement/g

\a 所有的字母字符. 等同於[a-zA-Z]

\l 小寫字母 [a-z]

\L 非小寫字母 [^a-z]

\u 大寫字母 [A-Z]

\U 非大寫字母 [^A-Z]

* 匹配0-任意個

\+ 匹配1-任意個

\? 匹配0-1個

\{n,m} 匹配n-m個

\{n} 匹配n個

\{n,} 匹配n-任意個

\{,m} 匹配0-m個

\_. 匹配包含換行在內的所有字符

\{-} 表示前一個字符可出現零次或多次,但在整個正則表達式可以匹配成功的前提下,匹配的字符數越少越好

\= 匹配一個可有可無的項

\_s 匹配空格或斷行

\_[]

  1. grep

grep –E “pattern” filename

egrep “pattern” filename

grep –Ev “pattern” filename

  1. sed

文本替換 sed (-i) ‘s/pattern/replacement/g’ filename

刪除行 sed (-i) ‘/pattern/ d’ filename

  1. awk

awk ‘/pattern/’ filename

awk ‘$1 ~ /pattern/’ filename

awk –F ‘pattern’ ‘{print $1}’ filename


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com