其實主要是正則表達式中的一些特殊語法。在網上找的幾篇文章,截取相關部分貼在了下面,方便以后翻閱。
參考:http://hi.baidu.com/sei_zhouyu/item/c18e1a950d2e9eb5cc80e558
http://blog.mcuol.com/User/pclli/Article/55269_1.htm
還有萬能的百度百科:http://baike.baidu.com/view/94238.htm
(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就不行。)
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的行.
egrep:
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表示文件沒找到.
在正則下 \ 關閉后續字符的特殊定義,但
\{\}會打開其特殊定義 . 任何單個字符 * 0個或多個 在它之前的單個字符 單獨出現時 在BRE中不具有任何意義(因為前面為空 就什么都沒有) ^ 在BRE中 在表達式開頭處具有意義 在ERE中 任何位置都有意義 $ 同上,只是他代表的是結尾處 [] 匹配方括號內任一字符 - 在這里的意思是連續 ex:1-9 1到9 ^ 代表非 在方括號表達式中,所有的meta字符都會失去特殊含義 []*\.-]這個例子比較特殊 對] 跟- 放進[]里的位置有些許講究
.*\1 這個的意思是 ''或者“”, 不用擔心單引號先找到或者是雙引號先找到
注:BRE 基礎正則表達式 ERE 擴展正則表達式 注: [::] 字符集 ex: [:alpha:] 字母字符 [:alnum:] 數字字符 [:upper:] 大寫 [:lower:] 小寫 [:space:] 空格(和'\t')
[..] 多字符序列視為一個單位 [==]等價字符集 對於有音標的才需要
后向引用
配一個\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的行。
標記匹配字符,如'
',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-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”范圍內的任意字符。 |
