Linux Shell正則表達式語法介紹

一個正則表達式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱爲元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達式作爲一個模板,將某個字符模式與所搜索的字符串進行匹配。

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

^

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

$

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

*

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

+

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

?

匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "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 集合,在Visual Basic Scripting Edition 中則使用 $0…$9 屬性。要匹配圓括號字符,請使用 '/(' 或 '/)'。

(?:pattern)

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

(?=pattern)

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

(?!pattern)

負向預查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之後開始。

x|y

匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。

[xyz]

字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

[^xyz]

負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

[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 之前至少有is preceded by at least 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 匹配版權符號 (?)。

/*****************************************************************************************/

幾乎所有重要問題都需要從無用數據中過濾出有用數據。瞭解大量的 UNIX? 命令行實用工具如何使用正則表達式 來去蕪取精。
非常奇怪,直到今天我仍然能重複週六早上的經典歌曲“Conjunction Junction”。這是好事(看了太多電視)還是壞事(也許是我現在職業的先兆)仍然有待討論。不管怎樣,這首小調在歡快的節奏下傳遞了基本的信息。

我還沒有爲學習 UNIX 構想出與“Conjunction Junction”相似的作品,但是我會在未來的幾個月裏嘗試親手編寫這樣的歌曲。與此同時,趁着快樂回憶所帶來的好心情,我們繼續以 Schoolhouse 搖滾的傳統學習方式攻克命令行。

現在開始上課。吐出嘴裏的口香糖,回到您的座位上,然後拿出一根二號鉛筆。還有您,Spicoli。

模仿秀

您可以將 UNIX 命令行看作是一句話:

可執行命令,如 cat 或 ls,是動詞——操作。
命令的輸出是名詞——要查閱或使用的數據。
Shell 操作符,如 |(管道)或 >(重定向標準輸出),是連詞——用於連接句子。
例如,命令行:ls -A | wc -l 用於計算當前目錄下的條目數(忽略特殊條目 . 和 ..),它包含兩個句子。第一個句子 ls -A 是動詞結構,列舉當前目錄下的內容,第二個句子 wc -l 是另一個動詞結構,用於計算行數。第一個句子輸出的結果作爲第二個句子的輸入,並由連接詞(管道)連接這兩個句子。

在本系列文章以及其他文章中展示的許多您可能已經學習過的命令行句式都具有這種句子結構。

但是,如果缺少了文法上的修飾語,命令行將顯得不專業。當然,基本句子也能完成工作,但是這樣顯得不優美。(在此對高中英語演唱二人組 Rad 女士和 Perlstein 女士表示歉意。)解決更有趣的問題需要用到形容詞。

幾乎所有重要問題都需要從無用數據中過濾出有用數據。雖然屬性的數量和種類會有所不同,但是每種方案都通過某種方式(形式或格式),隱式或顯式地描述了它要查找並處理的信息,從而生成另外一種形式的其他信息。

在命令行中,正則表達式 的作用相當於形容詞——一種描述或限定詞。在應用到輸出時,正則表達式可辨別相關數據和無關數據。

標點概述

讓我們看一個示例問題。

grep 實用工具逐行過濾輸入並尋找匹配。grep 的最簡單應用是打印那些包含與某個模式匹配的文本的行。grep 可以查找具有固定順序的字符組合,甚至可以通過使用 -i 選項來忽略大小寫。

因此,假定文件 heroes.txt 包含以下行:

CatwomanBatmanThe TickSpider ManBlack CatBatgirlDanger GirlWonder WomanLuke CageThe PunisherAnt ManDead GirlAquamanSCUDSpider WomanBlackboltMartian Manhunter


命令行:

grep -i man heroes.txt


將生成:

CatwomanBatmanSpider ManWonder WomanAnt ManAquamanMartian Manhunter


其中 grep 掃描 heroes.txt 文件中的每一行並查找字母 m,後面緊跟 a,然後緊跟 n。除了必須保證相鄰,這些字母可以出現在行的任何位置,甚至可以位於較大的單詞中間。在不考慮大小寫的情況下(-i 選項),Catwoman、Batman、Spider Man、Wonder Woman、Ant Man、Aquaman 和 Martian Manhunter 都包含字符串 man。

grep 實用工具包含其他可優化搜索的內置選項。例如,-w 選項限制於匹配整個單詞,因此 grep -i -w man 將排除 Catwoman 和 Batman(舉例來說)。

該工具還有一個優秀的功能,可以排除而不是包括所有匹配的搜索結果。使用 -v 選項來排除 匹配的行。例如:

grep -v -i 'spider' heroes.txt


將打印除了包含字符串 spider 之外的所有行。

CatwomanBatmanThe TickBlack CatBatgirlDanger GirlWonder WomanLuke CageThe PunisherAnt ManDead GirlAquamanSCUDBlackboltMartian Manhunter


但是,對於以下這些情況,您該如何處理?只希望得到那些開頭爲“Bat”的單詞;或者以“bat”、“Bat”、“cat”或“Cat”開頭的單詞?或者希望知道有多少漫畫復仇者的名字以“man”結束。在這些實例中,類似於上述三個示例的簡單字符串搜索將無法滿足要求,因爲這些搜索不區分位置。

位置、位置、位置和備選項

正則表達式可以 過濾特定的位置,例如行的開始或結束,以及單詞的開始和結束。正則表達式(通常簡寫爲 regex)還可以描述:備選項(您可將其稱爲“this”或“that”);固定長度、可變長度或不定長度的重複;範圍(例如,“a-m 之間的任意字母”);還有字符的類別或種類(“可打印字符”或“標點符號”),以及其他技術。

表 1 顯示了一些常用的正則表達式操作符。您可以連接表 1 中顯示的元素(以及其他操作符)並加以組合使用,從而構建(非常)複雜的正則表達式。


表 1. 常用的正則表達式操作符
操作符 用途
.(句號) 匹配任意單個字符。
^(脫字號) 匹配出現在行首或字符串開始位置的空字符串。
$(美元符號) 匹配出現在行末的空字符串。
A  匹配大寫字母 A。
a  匹配小寫字母 a。
/d  匹配任意一位數字。
/D  匹配任意單個非數字字符。
/w  匹配任意單個字母數字字符,同義詞是 [:alnum:]。
[A-E]  匹配任意大寫的 A、B、C、D 或 E。
[^A-E]  匹配除 A、B、C、D 和 E 之外的任意字符。
X?  匹配出現零次或一次的大寫字母 X。
X*  匹配零個或任意個大寫 X。
X+  匹配一個或多個字母 X。
X{n}  精確匹配 n 個字母 X。
X{n,m}  匹配最少 n 個並且不超過 m 個字母 X。如果省略 m,表達式將嘗試匹配最少 n 個 X。
(abc|def)+  匹配一連串的(最少一個) abc 或 def;abc 和 def 將匹配。

以下是一些使用 grep 作爲搜索工具的正則表達式示例。許多其他 UNIX 工具,包括交互式編輯器 vi 和 Emacs、流編輯器 sed 和 awk,以及所有現代編程語言都支持正則表達式。在您學會正則表達式的語法(也許相當晦澀)之後,就可以將您的專業知識靈活運用到不同的工具、編程語言和操作系統。

查找以“Bat”開頭的名稱

要查找以“Bat”開頭的名稱,請使用:

grep -E '^Bat'


可以使用 -E 選項來指定正則表達式。^(脫字號)字符匹配行首或字符串的開頭,這是一個出現在每行或每個字符串開頭字符之前的假想字符。字母 B、a 和 t 只具有字面含義並且僅匹配那些特定的字符。因此,命令 grep -E '^Bat' 將生成:

BatmanBatgirl


由於許多 regex 操作符也爲 Shell 所使用(其中一些具有不同的用途,另外一些則有類似的用途),因此一個好的習慣是使用單引號將命令行中的每個 regex 括起來,以保護 regex 操作符免遭 Shell 的誤解。例如,*(星號)和 $(美元符號)都是 regex 操作符,並且對於您的 Shell 具有特殊的含義。

查找以“man”結尾的名稱

要查找以“man”結尾的名稱,可以使用 regex man$ 來匹配序列 m、a 和 n,並且後面緊接與 regex 操作符 $ 匹配的行(字符串)。

查找空行

基於 ^ 和 $ 的作用,您可以使用 regex ^$ 來查找空行(相當於在開始之後立即結束的行)。

備選項或集合操作符

要查找以“bat”、“Bat”、“cat”或“Cat”開頭的單詞,可以使用以下兩個技巧。首先是備選項,如果備選項中的任意 模式匹配,都會產生匹配的結果。例如,命令:

grep -E '^(bat|Bat|cat|Cat)' heroes.txt


可實現這一技巧。regex 操作符 |(豎線)表示備選項,因此 this|that 匹配字符串 this 或字符串 that。因此,^(bat|Bat|cat|Cat) 表示“行首緊跟 bat、Bat、cat 或 Cat之一。”當然,可以使用 grep -i 來簡化該 regex,這樣可以忽略大小寫,從而將命令簡化爲:

grep -i -E '^(bat|cat)' heroes.txt


匹配“bat”、“Bat”、“cat”或“Cat”的另一個方法是使用 [ ](方括號)集合 操作符。如果將一組字符放在一個集合中,則可以匹配那些字符中的任意一個。(您可以將集合 看作是字符備選項的簡寫法。)

例如,命令行:

grep -E '^[bcBC]at' heroes.txt


與以下命令生成的結果相同:

grep -E '^(bat|Bat|cat|Cat)' heroes.txt


您可以再次使用 -i 將 regex 簡化爲 ^[bc]at。

而且,還可以使用 -(連字符)操作符在集合中指定包含的字符範圍。例如,用戶名通常以字母開頭。假定要在提交給您的服務器的 Web 表格中驗證這樣的用戶名,可以使用類似於 ^[A-Za-z] 的 regex。此 regex 表示“字符串的開頭後緊跟任意大寫字母 (A-Z) 或任意小寫字母 (a-z)。”順便說明一下,[A-z] 與 [A-Za-z] 作用相同。

還可以在集合中混合使用範圍和單個字符。regex [A-MXYZ] 將匹配任意大寫的 A-M、X、Y 和 Z。

並且,如果希望反轉集合(即排除集合中的任意字符),可以使用特殊集合 [^ ] 幷包含要排除的範圍或字符。以下是反轉集合的示例。要查找所有名稱中包含 at 的超級英雄,並排除 Dark Knight 和 Batman,請鍵入:

grep -i -E '[^b]at' heroes.txt 


此命令生成:

CatwomanBlack Cat


由於某些集合需要經常使用,所以設計出簡化符號以代替大量字符。例如,集合 [A-z0-9_] 十分常用,因此可以簡寫爲 /w。與此類似,操作符 /W 是集合 [^A-z0-9_] 的簡寫。還可以使用符號 [:alnum:] 代替 /w,使用 [^[:alnum:]] 代替 /W。

順便說明一下,/w(以及同義詞 [:alnum:])是特定於區域的,而 [A-z0-9_] 即表示字母 A-z、數字 0-9 和下劃線。如果要開發國際化應用程序,請使用區域特定的格式以使代碼可以在許多區域之間移植。

跟我一起重複:重複,重複,重複

到目前爲止,已經介紹了字面值、位置和兩種備選項操作符。僅使用這些內容,就可以匹配大多數具有可預測 長度的模式。現在回到用戶名,通過以下 regex 命令可以確保每個用戶名以字母開頭並緊跟恰好七個字母或數字:

[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]


但是這樣有點笨拙。而且,它只匹配恰好八個字符的用戶名。它不會匹配三到八個字符之間的名稱,這通常也是有效的用戶名。

正則表達式還可以包括重複修飾符。重複修飾符可以指定數量,如沒有、一個、多個、一個或多個,零或一個、五到十個,以及恰好三個。重複修飾符必須與其他模式組合,修飾符本身沒有含義。

例如,regex:

^[A-z][A-z0-9]{2,7}$


可以實現前面描述的用戶名過濾功能。用戶名 是以字母開頭,後面緊跟至少兩個,但不超過七個字母或數字的字符串,並且緊跟字符串結尾。

此處的位置定位點非常重要。如果沒有兩個位置操作符,則會錯誤地接受任意長度的用戶名。爲什麼呢?請考慮 regex:

^[A-z][A-z0-9]{2,7}


此命令辨別:字符串是否以字母開頭並緊跟二到七個字母?但是它未提到終止條件。因此,字符串 samuelclemens 滿足條件,但是它的長度顯然超出了有效用戶名的範圍。與此類似,省略開始定位點 ^,或同時省略兩個定位點將分別匹配以類似 munster1313 結束或包含該字符串的字符串。如果必須匹配特定的長度,請記得在要求的模式的開頭和結尾分別加上分隔符。

以下是其他一些示例:

可以使用 {2,} 查找兩次或多次重複。regex ^G[o]{2,}gle 匹配 Google、Gooogle、Goooogle 等等。
重複修飾符 ?、+ 和 * 分別查找零次或一次、一次或多次,以及零次或多次重複。(例如,您可以將 ? 看作是 {0,1} 的簡寫法。)
regex boys? 匹配 boy 或 boys;regex Goo?gle 匹配 Gogle 或 Google。

regex Goo+gle 匹配 Google、Gooogle、Goooogle 等等。

construct Goo*gle 匹配 Gogle、Google、Gooogle 等等。

可以將重複修飾符應用到單個字符(如上所示),還可以應用到更復雜的組合。使用 ( 和 ) 圓括號(就像數學中的用法)將修飾符應用到子表達式。下面是一個示例:給定文本文件 test.txt: The rain in Spain falls mainly on the the plain.It was the best of of times;it was the worst of times.


命令 grep -i -E '(/b(of|the)/W+){2,}' test.txt 將生成:

on the the plain.It was the best of of times;


regex 操作符 /b 匹配單詞邊界 或 (/W/w|/w/W)。該 regex 表示“一連串完整單詞‘the’或‘of’後面緊跟非文字字符。”您可能會提出疑問,爲什麼 /W+ 是必需的:/b 是位於單詞開頭或結尾的空字符串。在單詞之間必須包括這一(或這些)字符,否則該 regex 將無法找到匹配。
捕獲需要注意的內容

查找文本是常見的問題,但是更常見的問題則是希望在找到文本之後將其提取出來。換句話說,您希望去粗取精。

正則表達式通過捕獲 來提取信息。如果希望將需要的文本與其他內容分開,請使用圓括號將模式括起來。實際上,您已經使用圓括號收集術語;在默認情況下,圓括號自動進行捕獲。

要查看捕獲,請切換到 Perl。(grep 實用工具不支持捕獲,因爲其目標是打印包含模式的行。)

以下命令:

perl -n -e '/^The/s+(.*)$/ && print "$1/n"' heroes.txt


將打印:

TickPunisher


使用命令 perl -e 可以直接從命令行運行 Perl 程序。perl -n 命令針對輸入文件的每一行運行一次程序。命令的 regex 部分,即位於斜槓之間的文本(/)表示“匹配字符串的開頭,然後字母‘T’、‘h’、‘e’後緊跟一個或多個空格字符 /s+,然後捕獲直到字符串結尾的所有字符。

Perl 捕獲內容被放在以 $1 開頭的特殊 Perl 變量中。Perl 程序的其餘部分打印捕獲的內容。

每個嵌套的括號對,從左開始算起,每個左圓括號加一,放在下一個特殊的數字變量中。例如:

perl -n -e '/^(/w)+-(/w+)$/ && print "$1 $2"' 


將生成:

Spider ManAnt ManSpider Woman


捕獲感興趣的文本僅僅是隔靴搔癢。如果能夠準確確定材料,就可以使用其他材料改變其外觀。類似於 vi 和 Emacs 的編輯器將模式匹配與替換組合,從而將查找和替換文本組合成一步操作。還可以使用模式、替換和 sed 從命令行更改文本。

豐富的主題

正則表達式非常強大;可供使用的操作符的數量龐大,種類繁多。它包含如此豐富的信息和實踐知識,我們在這裏所能列舉的實屬鳳毛麟角。

幸運的是,有以下三種優秀的正則表達式理論來源可供使用:

如果在您的系統上有 Perl,可以參閱 Perl Regular Expression man 頁面(鍵入 perldoc perlre)。它會提供 regex 的精彩介紹,幷包含許多有用的示例。許多編程語言都已採用 Perl 兼容的正則表達式 (PCRE),因此您在此 man 頁面讀到的內容已被直接轉換到 PHP、Python、Java? 和 Ruby 編程語言,以及許多其他最新工具。
Jeffrey Friedl 編著的《正則表達式》(第三版)被認爲是 regex 用法方面的聖經。該書細緻、準確、清晰、務實地說明了匹配的工作方式、所有的 regex 操作符、多數優先性(限制 + 和 * 匹配字符的數量),以及更多內容。此外,Friedl 的書還包括一些令人驚歎的正則表達式,可以準確地匹配完全限定的電子郵件地址和其他 Request for Comments (RFC) 特定的字符串。
Nathan Good 編著的 Regular Expression Recipes 一書提供了針對許多常見數據處理和過濾問題的有用的解決方案。如果需要提取郵政編碼、電話號碼或引用的字符串,請嘗試 Nathan 的解決方案。
在命令行中,可以採用許多方法使用正則表達式。幾乎每個處理文本的命令都支持某種形式的正則表達式。大多數 Shell 命令語法還或多或少地擴展正則表達式以匹配文件名(儘管操作符的功能可能有所不同)。

例如,鍵入 ls [a-c] 以查找名爲 a、b 或 c 的文件。鍵入 ls [a-c]* 以查找以 a、b 或 c 開頭的所有文件名。此處的 * 在 Shell 中不像 grep 的解釋器那樣修飾 [a-c],* 被解釋爲 .*。? 操作符在 Shell 中也可以工作,但是被解釋爲 .,即匹配任意單個字符。

查看您最喜歡的實用工具或 Shell 的文檔以確定哪些 regex 操作符受支持,以及操作符可能具有的獨特性。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/cnseiya/archive/2007/11/08/1872851.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章