其實主要是正則表達式中的一些特殊語法。在網上找的幾篇文章,截取相關部分貼在了下面,方便之後翻閱。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\ 等等格式都不行, 上網查詢了下正則表達式。 總結以下:
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 甚至沒有機會查看 $,$ 就從咱們的正則表達式上消失了。
格式: 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的行。
標記匹配字符,如'
',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的行.
+
匹配一個或多個先前的字符。如:'[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\}
\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匹配版權符號(©)。 |
\ |
將下一個字符標記爲一個特殊字符、或一個原義字符、或一個向後引用、或一個八進制轉義符。例如,「\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」範圍內的任意字符。 |