linux通配符,grep和 egrep區別

其實主要是正則表達式中的一些特殊語法。在網上找的幾篇文章,截取相關部分貼在了下面,方便之後翻閱。linux

參考:http://hi.baidu.com/sei_zhouyu/item/c18e1a950d2e9eb5cc80e558正則表達式

            http://blog.mcuol.com/User/pclli/Article/55269_1.htmshell

還有萬能的百度百科:http://baike.baidu.com/view/94238.htmbash

 

(little tip:正則表達式中的[[:space:]]跟空格不是徹底同樣,他出表明空格字符外,還可表明'\t'。假如hello.c文件中有一行「int main()」,若是文件中int 和main之間用的是空格,則egrep "int " hello.c 和egrep"int[[:space:]]" hello.c均可以找到這一行,但若是int 和main之間使用TAB鍵隔開的,則用egrep"int[[:space:]]" hello.c仍能夠找到這一行,但用egrep "int " hello.c就不行。)app

 

grep:編碼

格式: grep [option] pattern filename 注意: pattern若是是表達式或者超過兩個單詞的, 須要用引號引用. 能夠是單引號也可雙引號, 區別是單引號沒法引用變量而雙引號能夠.
grep '\<Tom\>' file   包含單詞Tom的行 grep 'Tom savage' file 包含Tom savage的行 grep '^Tommy' file 包含以Tommy開頭的行 grep '\.bak$' file 包含以.bak結束的行 grep '[Pp]yramid' file 包含pyramid 或Pyramid的單詞的行 grep '[A-Z]' file 包含至少一個大寫字母的行 grep '[0-9]' file 包含至少一個數字的行 grep '[A-Z]...[0-9]' file 包含五個字符,以大寫開頭, 和一個數字結尾的行. grep -w '[tT]est' file 包含單詞和test的行. grep -s 'ken sun' file 找到包含ken sun的行, 但不打印行, 而是用來檢查退出狀態. grep -v aaa file 打印不包含aaa的行. grep -i cathy file 打印全部包含cathy的行, 而不考慮大小些. grep -l 'dear cathy' * 打印包含dear cathy的文件的文件名清單. grep -n tom file   打印匹配的行並追加行號. grep "$LOGNAME" file 包含變量內容的行, 注意必須用雙引號, 單引號則沒法引用變量. grep '$name' file 打印包含字符$name的行.atom

 

egrep:spa

egrep = grep -E 可使用基本的正則表達外, 還能夠用擴展表達式. 注意區別. 擴展表達式: + 匹配一個或者多個先前的字符, 至少一個先前字符. ? 匹配0個或者多個先前字符. a|b|c 匹配a或b或c () 字符組, 如: love(able|ers) 匹配loveable或lovers. (..)(..)\1\2 模板匹配. \1表明前面第一個模板, \2代第二個括弧裏面的模板. x{m,n} =x\{m,n\} x的字符數量在m到n個之間.
egrep '^+' file   以一個或者多個空格開頭的行. grep '^*' file   同上 egrep '(TOM|DAN) SAVAGE' file 包含 TOM SAVAGE 和DAN SAVAGE的行. egrep '(ab)+' file 包含至少一個ab的行. egrep 'x[0-9]?' file 包含x或者x後面跟着0個或者多個數字的行. egrep 'fun\.$' * 全部文件裏面以fun.結尾的行. egrep '[A-Z]+' file 至少包含一個大寫字母的行. egrep '[0-9]' file 至少一個數字的行. egrep '[A-Z]...[0-9]' file 有五個字符, 第一個式大寫, 最後一個是數字的行. egrep '[tT]est' file 包含單詞test或Test的行. egrep 'ken sun' file 包含ken sun的行. egrep -v 'marry' file 不包含marry的行. egrep -i 'sam' file 不考慮sam的大小寫,含有sam的行. egrep -l "dear ken" * 包含dear ken的全部文件的清單. egrep -n tom file 包含tom的行, 每行前面追加行號. egrep -s "$name" file 找到變量名$name的, 不打印而是顯示退出狀態. 0表示找到. 1表示表達式沒找到符合要求的, 2表示文件沒找到.code

 

在正則下 \ 關閉後續字符的特殊定義,但 
\{\}會打開其特殊定義 . 任何單個字符 * 0個或多個 在它以前的單個字符   單獨出現時 在BRE中不具備任何意義(由於前面爲空 就什麼都沒有) ^ 在BRE中  在表達式開頭處具備意義   在ERE中  任何位置都有意義 $ 同上,只是他表明的是結尾處 [] 匹配方括號內任一字符    - 在這裏的意思是連續 ex:1-9  1到9    ^ 表明非 在方括號表達式中,全部的meta字符都會失去特殊含義 []*\.-]這個例子比較特殊 對] 跟-  放進[]裏的位置有些許講究 ′ "
.*\1 這個的意思是 ''或者「」, 不用擔憂單引號先找到或者是雙引號先找到
    注:BRE 基礎正則表達式 ERE 擴展正則表達式 注: [::] 字符集 ex: [:alpha:] 字母字符 [:alnum:] 數字字符      [:upper:] 大寫 [:lower:] 小寫 [:space:] 空格(和'\t')
orm

[..] 多字符序列視爲一個單位 [==]等價字符集 對於有音標的才須要
後向引用  
  配一個\n  ex: 
\1 表示引用前面的一次,那就是() ()  原來有一次,再應用一次 另外注意的是,n表明1-9  最多能夠9次的應用,順序是從左開始

元字符 描述
\ 將下一個字符標記爲一個特殊字符、或一個原義字符、或一個向後引用、或一個八進制轉義符。例如,「\n」匹配字符「n」。「\\n」匹配一個換行符。序列「\\」匹配「\」而「\(」則匹配「(」。
^ 匹配輸入字符串的開始位置。若是設置了RegExp對象的Multiline屬性,^也匹配「\n」或「\r」以後的位置。
$ 匹配輸入字符串的結束位置。若是設置了RegExp對象的Multiline屬性,$也匹配「\n」或「\r」以前的位置。
* 匹配前面的子表達式零次或屢次。例如,zo*能匹配「z」以及「zoo」。*等價於{0,}。
+ 匹配前面的子表達式一次或屢次。例如,「zo+」能匹配「zo」以及「zoo」,但不能匹配「z」。+等價於{1,}。
? 匹配前面的子表達式零次或一次。例如,「do(es)?」能夠匹配「does」或「does」中的「do」。?等價於{0,1}。
{n} n是一個非負整數。匹配肯定的n次。例如,「o{2}」不能匹配「Bob」中的「o」,可是能匹配「food」中的兩個o。
{n,} n是一個非負整數。至少匹配n次。例如,「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的全部o。「o{1,}」等價於「o+」。「o{0,}」則等價於「o*」。
{n,m} m和n均爲非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}」將匹配「fooooood」中的前三個o。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。
? 當該字符緊跟在任何一個其餘限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式儘量少的匹配所搜索的字符串,而默認的貪婪模式則儘量多的匹配所搜索的字符串。例如,對於字符串「oooo」,「o+?」將匹配單個「o」,而「o?」將匹配全部「o」。
.點 匹配除「\n」以外的任何單個字符。要匹配包括「\n」在內的任何字符,請使用像「(.|\n)」的模式。
(pattern) 匹配pattern並獲取這一匹配。所獲取的匹配能夠從產生的Matches集合獲得,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號字符,請使用「「 
」。
(?:pattern) 匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供之後使用。這在使用或字符「(|)」來組合一個模式的各個部分是頗有用。例如「industr(?:y|ies)」就是一個比「industry|industries」更簡略的表達式。
(?=pattern) 正向確定預查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。例如,「Windows(?=95|98|NT|2000)」能匹配「Windows2000」中的「Windows」,但不能匹配「Windows3.1」中的「Windows」。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始。
(?!pattern) 正向否認預查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。例如「Windows(?!95|98|NT|2000)」能匹配「Windows3.1」中的「Windows」,但不能匹配「Windows2000」中的「Windows」。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始。
(?<=pattern) 反向確定預查,與正向確定預查相似,只是方向相反。例如,「(?<=95|98|NT|2000)Windows」能匹配「2000Windows」中的「Windows」,但不能匹配「3.1Windows」中的「Windows」。
(?<!pattern) 反向否認預查,與正向否認預查相似,只是方向相反。例如「(?<!95|98|NT|2000)Windows」能匹配「3.1Windows」中的「Windows」,但不能匹配「2000Windows」中的「Windows」。
x|y 匹配x或y。例如,「z|food」能匹配「z」或「food」。「(z|f)ood」則匹配「zood」或「food」。
[xyz] 字符集合。匹配所包含的任意一個字符。例如,「[abc]」能夠匹配「plain」中的「a」。
[^xyz] 負值字符集合。匹配未包含的任意字符。例如,「[^abc]」能夠匹配「plain」中的「plin」。
[a-z] 字符範圍。匹配指定範圍內的任意字符。例如,「[a-z]」能夠匹配「a」到「z」範圍內的任意小寫字母字符。
[^a-z] 負值字符範圍。匹配任何不在指定範圍內的任意字符。例如,「[^a-z]」能夠匹配任何不在「a」到「z」範圍內的任意字符。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如,「er\b」能夠匹配「never」中的「er」,但不能匹配「verb」中的「er」。
\B 匹配非單詞邊界。「er\B」能匹配「verb」中的「er」,但不能匹配「never」中的「er」。
\cx 匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須爲A-Z或a-z之一。不然,將c視爲一個原義的「c」字符。
\d 匹配一個數字字符。等價於[0-9]。
\D 匹配一個非數字字符。等價於[^0-9]。
\f 匹配一個換頁符。等價於\x0c和\cL。
\n 匹配一個換行符。等價於\x0a和\cJ。
\r 匹配一個回車符。等價於\x0d和\cM。
\s 匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。
\S 匹配任何非空白字符。等價於[^ \f\n\r\t\v]。
\t 匹配一個製表符。等價於\x09和\cI。
\v 匹配一個垂直製表符。等價於\x0b和\cK。
\w 匹配包括下劃線的任何單詞字符。等價於「[A-Za-z0-9_]」。
\W 匹配任何非單詞字符。等價於「[^A-Za-z0-9_]」。
\xn 匹配n,其中n爲十六進制轉義值。十六進制轉義值必須爲肯定的兩個數字長。例如,「\x41」匹配「A」。「\x041」則等價於「\x04&1」。正則表達式中可使用ASCII編碼。
\num 匹配num,其中num是一個正整數。對所獲取的匹配的引用。例如,「(.)\1」匹配兩個連續的相同字符。
\n 標識一個八進制轉義值或一個向後引用。若是\n以前至少n個獲取的子表達式,則n爲向後引用。不然,若是n爲八進制數字(0-7),則n爲一個八進制轉義值。
\nm 標識一個八進制轉義值或一個向後引用。若是\nm以前至少有nm個得到子表達式,則nm爲向後引用。若是\nm以前至少有n個獲取,則n爲一個後跟文字m的向後引用。若是前面的條件都不知足,若n和m均爲八進制數字(0-7),則\nm將匹配八進制轉義值nm。
\nml 若是n爲八進制數字(0-3),且m和l均爲八進制數字(0-7),則匹配八進制轉義值nml。
\un 匹配n,其中n是一個用四個十六進制數字表示的Unicode字符。例如,\u00A9匹配版權符號(©)。

 

前些天寫字符串匹配的腳本,以下:   1 #!/bin/sh

  2

  3 echo"path: /home/appadmin/workspace"

  4 echo"usage: "$0" [h|cpp|both|all] string_symbol"

  5 echo"space use: grep ' 'str"

  6

  7 if [ $1 = 'h'];

  8 then

  9 find . -name"*\.h" | xargs grep -sn --color $2

 10 fi

 11

 12 if [ $1 = 'cpp'];then

 13 |   find . -name "*\.cpp" | xargs grep-sn --color $2

 14 fi

 15

 16 if [ $1 ='both' ];then

 17 |   find . -name "*[\.h|\.cpp]" |xargs grep -sn --color $2

 18 fi

 19

 20 if [ $1 = 'all'];then

 21 |   find . -name "*" | xargs grep -sn--color $2

 22 fi

已經能知足查找字符串的功能了, 但爲了實現查找單詞,想盡了各類辦法,未能如願。    (單詞就是  ‘ ’string‘ ’ 這樣的pattern)

使用  

grep ' 'string' '    

grep " string"   

grep "\string\ "

grep \ string\ 等等格式都不行, 上網查詢了下正則表達式。 總結以下:

1. linux 通配符

linux通配符,是系統級別的。 不少shell指令都使用這個規則。 包括  ls stringname /  find . -name"stringname" 等。

* - 通配符,表明任意字符(0到多個) ? - 通配符,表明一個字符 # - 註釋 / - 跳轉符號,將特殊字符或通配符還原成通常符號 | - 分隔兩個管線命令的界定 ; - 連續性命令的界定 ~ - 用戶的根目錄 $ - 變量前須要加的變量值 ! - 邏輯運算中的"非"(not) / - 路徑分隔符號 >, >> - 輸出導向,分別爲"取代"與"累加" ' - 單引號,不具備變量置換功能 " - 雙引號,具備變量置換功能 ` - quote符號,兩個``中間爲能夠先執行的指令 () - 中間爲子shell的起始與結束 [] - 中間爲字符組合 {} - 中間爲命令區塊組合 Ctrl+C - 終止當前命令 Ctrl+D - 輸入結束(EOF),例如郵件結束的時候 Ctrl+M - 就是Enter Ctrl+S - 暫停屏幕的輸出 Ctrl+Q - 恢復屏幕的輸出 Ctrl+U - 在提示符下,將整行命令刪除 Ctrl+Z - 暫停當前命令 && - 當前一個指令執行成功時,執行後一個指令 || - 當前一個指令執行失敗時,執行後一個指令
其中最經常使用的是*、?、[]<span style="font-family: Arial,Helvetica, sans-serif;">、</span><span style="font-family:Arial, Helvetica, sans-serif;"> ' 和 " 。下面舉幾個簡單的例子:</span>
1,ls test*            <== *表示後面不論接幾個字符都接受(沒有字符也接受) 2,ls test?           <== ?表示後面當且僅當接一個字符時才接受 3,ls test???      <== ???表示必定要接三個字符 4,cp  test[1~5] /tmp      <== test1, test2, test3, test4, test5若存在,則複製到/tmp目錄下 5,cd /lib/modules/' uname  -r'/kernel/drivers       <== 被 ' ' 括起來的命令先執行 
通配符語法:?  ? 與任何單個字符匹配。例子: * myfile? 與文件名爲 myfile 後跟單個字符的任何文件匹配。 * /tmp/notes?txt 將與 /tmp/notes.txt 和 /tmp/notes_txt 都匹配,若是它們存在。
通配符語法:[]  該通配符與 ? 類似,但容許指定得更確切。要使用該通配符,把您想要匹配的全部字符放在 [] 內。結果的表達式將與 [] 中任一字符相匹配。您也能夠用 - 來指定範圍,甚至還能夠組合範圍。例子: * myfile[12] 將與 myfile1 和 myfile2 匹配。只要當前目錄中至少有一個這樣的文件存在,該通配符就能夠進行擴展。 * [Cc]hange[Ll]og 將與 Changelog、ChangeLog、changeLog 以及 changelog 匹配。您能夠看到,與大寫形式的變形匹配時,使用括弧通配符頗有用。 * ls /etc/[0-9]* 將列出 /etc 中以數字開頭的全部文件。 * ls /tmp/[A-Za-z]* 將列出 /tmp 中以大寫字母或小寫字母開頭的全部文件。
通配符語法:[!]  除了不與括弧中的任何字符匹配外,[!] 構造與 [] 構造相似,只要不是列在 [! 和 ] 之間的字符,它將與任何字符匹配。例子:   * rm myfile[!9] 將刪除除 myfile9 以外的名爲 myfile 加一個字符的全部文件。
通配符告誡說明  這裏有一些使用通配符時應該注意的告誡說明。因爲 bash 對與通配符相關的字符(?、[、]、*)進行特別處理,所以您將包含這些字符的參數輸入到命令中時,須要特別當心。例如,若是您想要建立一個包含字符串 [fo]* 的文件,下面這個命令可能不會執行您想要作的事: $ echo [fo]* > /tmp/mynewfile.txt 若是 [fo]* 這個模式與當前工做目錄中的任何文件匹配,那麼您將在 /tmp/mynewfile.txt 內發現那些文件的名稱,而不是您所指望的文字 [fo]*。解決方法是什麼呢?嗯,一種方法是用單引號把這些字符括起來,這將告訴 bash 單純地執行,而不會對其進行通配符擴展: $ echo '[fo]*' > /tmp/mynewfile.txt 採用這種方法,您的新文件將包含所指望的文字的 [fo]*。另外一種方法是,您可使用反斜槓,告訴 bash [、] 和 * 應該被當成文字處理,而不是被當成通配符處理: $ echo /[fo/].$' /etc/fstab # /etc/fstab: static file system information. 在上面的示例中,咱們用單引號將咱們的正則表達式括起來以阻止 shell 解釋 $ 。在不使用單引號的狀況下,grep 甚至沒有機會查看 $,$ 就從咱們的正則表達式上消失了。

 

2.  grep  使用基本的正則表達

格式: grep [option] patternfilename 注意: pattern若是是表達式或者超過兩個單詞的, 須要用引號引用. 能夠是單引號也可雙引號, 區別是單引號沒法引用變量而雙引號能夠.

錨定行的開始 如:'^grep'匹配全部以grep開頭的行。

$

錨定行的結束 如:'grep$'匹配全部以grep結尾的行。

.

匹配一個非換行符的字符如:'gr.p'匹配gr後接一個任意字符,而後是p。

*

匹配零個或多個先前字符如:'*grep'匹配全部一個或多個空格後緊跟grep的行。 .*一塊兒用表明任意字符。

[]

匹配一個指定範圍內的字符,如'[Gg]rep'匹配Grep和grep。

[^]

匹配一個不在指定範圍內的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。

.

標記匹配字符,如'lov
',love被標記爲1。

\<

錨定單詞的開始,如:'\<grep'匹配包含以grep開頭的單詞的行。

\>

錨定單詞的結束,如'grep\>'匹配包含以grep結尾的單詞的行。

x\{m\}

重複字符x,m次,如:'0\{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。

\W

\w的反置形式,匹配一個或多個非單詞字符,如點號句號等。

 

單詞鎖定符,如: '\bgrep\b'只匹配grep。

例子:

grep 'Tomsavage' file 包含Tom savage的行 grep '^Tommy' file 包含以Tommy開頭的行 grep '\.bak$' file 包含以.bak結束的行 grep '[Pp]yramid' file 包含pyramid Pyramid的單詞的行 grep '[A-Z]' file 包含至少一個大寫字母的行 grep '[0-9]' file 包含至少一個數字的行 grep '[A-Z]...[0-9]' file 包含五個字符,以大寫開頭, 和一個數字結尾的行. grep -w '[tT]est' file 包含單詞和test的行. grep -s 'ken sun' file 找到包含ken sun的行, 但不打印行, 而是用來檢查退出狀態. grep -v aaa file 打印不包含aaa的行. grep -i cathy file 打印全部包含cathy的行, 而不考慮大小些. grep -l 'dear cathy' * 打印包含dear cathy的文件的文件名清單. grep -n tom file   打印匹配的行並追加行號. grep "$LOGNAME" file 包含變量內容的行, 注意必須用雙引號, 單引號則沒法引用變量. grep '$name' file 打印包含字符$name的行.

3. egrep 可使用基本的正則表達外, 還能夠用擴展表達式

+

匹配一個或多個先前的字符。如:'[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}

做用同x\{m\},x\{m,\},x\{m,n\}

 

4. 正則表達式的一些用法

\b

匹配一個單詞邊界,也就是指單詞和空格間的位置。例如,「er\b」能夠匹配「never」中的「er」,但不能匹配「verb」中的「er」

\B

匹配非單詞邊界。「er\B」能匹配「verb」中的「er」,但不能匹配「never」中的「er」

\cx

匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須爲A-Za-z之一。不然,將c視爲一個原義的「c」字符。

\d

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

\D

匹配一個非數字字符。等價於[^0-9]

\f

匹配一個換頁符。等價於\x0c\cL

\n

匹配一個換行符。等價於\x0a\cJ

\r

匹配一個回車符。等價於\x0d\cM

\s

匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]

\S

匹配任何非空白字符。等價於[^ \f\n\r\t\v]

\t

匹配一個製表符。等價於\x09\cI

\v

匹配一個垂直製表符。等價於\x0b\cK

\w

匹配包括下劃線的任何單詞字符。等價於「[A-Za-z0-9_]」

\W

匹配任何非單詞字符。等價於「[^A-Za-z0-9_]」

\xn

匹配n,其中n爲十六進制轉義值。十六進制轉義值必須爲肯定的兩個數字長。例如,「\x41」匹配「A」「\x041」則等價於「\x04&1」。正則表達式中可使用ASCII編碼。

\num

匹配num,其中num是一個正整數。對所獲取的匹配的引用。例如,「(.)\1」匹配兩個連續的相同字符。

\n

標識一個八進制轉義值或一個向後引用。若是\n以前至少n個獲取的子表達式,則n爲向後引用。不然,若是n爲八進制數字(0-7),則n爲一個八進制轉義值。

\nm

標識一個八進制轉義值或一個向後引用。若是\nm以前至少有nm個得到子表達式,則nm爲向後引用。若是\nm以前至少有n個獲取,則n爲一個後跟文字m的向後引用。若是前面的條件都不知足,若nm均爲八進制數字(0-7),則\nm將匹配八進制轉義值nm

\nml

若是n爲八進制數字(0-3),且ml均爲八進制數字(0-7),則匹配八進制轉義值nml

\un

匹配n,其中n是一個用四個十六進制數字表示的Unicode字符。例如,\u00A9匹配版權符號(©)。

 

\

將下一個字符標記爲一個特殊字符、或一個原義字符、或一個向後引用、或一個八進制轉義符。例如,「\n」匹配字符「n」「\\n」匹配一個換行符。序列「\\」匹配「\」「\(」則匹配「(」

^

匹配輸入字符串的開始位置。若是設置了RegExp對象的Multiline屬性,^也匹配「\n」「\r」以後的位置。

$

匹配輸入字符串的結束位置。若是設置了RegExp對象的Multiline屬性,$也匹配「\n」「\r」以前的位置。

*

匹配前面的子表達式零次或屢次。例如,zo*能匹配「z」以及「zoo」*等價於{0,}

+

匹配前面的子表達式一次或屢次。例如,「zo+」能匹配「zo」以及「zoo」,但不能匹配「z」+等價於{1,}

?

匹配前面的子表達式零次或一次。例如,「do(es)?」能夠匹配「does」「does」中的「do」?等價於{0,1}

{n}

n是一個非負整數。匹配肯定的n次。例如,「o{2}」不能匹配「Bob」中的「o」,可是能匹配「food」中的兩個o

{n,}

n是一個非負整數。至少匹配n次。例如,「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的全部o「o{1,}」等價於「o+」「o{0,}」則等價於「o*」

{n,m}

mn均爲非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}」將匹配「fooooood」中的前三個o「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。

?

當該字符緊跟在任何一個其餘限制符(*,+,?{n}{n,}{n,m})後面時,匹配模式是非貪婪的。非貪婪模式儘量少的匹配所搜索的字符串,而默認的貪婪模式則儘量多的匹配所搜索的字符串。例如,對於字符串「oooo」「o+?」將匹配單個「o」,而「o?」將匹配全部「o」

.

匹配除「\n」以外的任何單個字符。要匹配包括「\n」在內的任何字符,請使用像「(.|\n)」的模式。

(pattern)

匹配pattern並獲取這一匹配。所獲取的匹配能夠從產生的Matches集合獲得,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號字符,請使用

(?:pattern)

匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供之後使用。這在使用或字符「(|)」來組合一個模式的各個部分是頗有用。例如「industr(?:y|ies)」就是一個比「industry|industries」更簡略的表達式。

(?=pattern)

正向確定預查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。例如,「Windows(?=95|98|NT|2000)」能匹配「Windows2000」中的「Windows」,但不能匹配「Windows3.1」中的「Windows」。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始。

(?!pattern)

正向否認預查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。例如「Windows(?!95|98|NT|2000)」能匹配「Windows3.1」中的「Windows」,但不能匹配「Windows2000」中的「Windows」。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始。

(?<=pattern)

反向確定預查,與正向確定預查相似,只是方向相反。例如,「(?<=95|98|NT|2000)Windows」能匹配「2000Windows」中的「Windows」,但不能匹配「3.1Windows」中的「Windows」

(?<!pattern)

反向否認預查,與正向否認預查相似,只是方向相反。例如「(?<!95|98|NT|2000)Windows」能匹配「3.1Windows」中的「Windows」,但不能匹配「2000Windows」中的「Windows」

x|y

匹配xy。例如,「z|food」能匹配「z」「food」「(z|f)ood」則匹配「zood」「food」

[xyz]

字符集合。匹配所包含的任意一個字符。例如,「[abc]」能夠匹配「plain」中的「a」

[^xyz]

負值字符集合。匹配未包含的任意字符。例如,「[^abc]」能夠匹配「plain」中的「plin」

[a-z]

字符範圍。匹配指定範圍內的任意字符。例如,「[a-z]」能夠匹配「a」「z」範圍內的任意小寫字母字符。

[^a-z]

負值字符範圍。匹配任何不在指定範圍內的任意字符。例如,「[^a-z]」能夠匹配任何不在「a」「z」範圍內的任意字符。

相關文章
相關標籤/搜索