正則表達(dá)式(一)從初學(xué)到精通正則表達(dá)式

正則表達(dá)式(一)從初學(xué)到精通正則表達(dá)式

ID:14144056

大?。?6.50 KB

頁(yè)數(shù):6頁(yè)

時(shí)間:2018-07-26

正則表達(dá)式(一)從初學(xué)到精通正則表達(dá)式_第1頁(yè)
正則表達(dá)式(一)從初學(xué)到精通正則表達(dá)式_第2頁(yè)
正則表達(dá)式(一)從初學(xué)到精通正則表達(dá)式_第3頁(yè)
正則表達(dá)式(一)從初學(xué)到精通正則表達(dá)式_第4頁(yè)
正則表達(dá)式(一)從初學(xué)到精通正則表達(dá)式_第5頁(yè)
資源描述:

《正則表達(dá)式(一)從初學(xué)到精通正則表達(dá)式》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)

1、深入淺出之正則表達(dá)式(一)前言:???????半年前我對(duì)正則表達(dá)式產(chǎn)生了興趣,在網(wǎng)上查找過(guò)不少資料,看過(guò)不少的教程,最后在使用一個(gè)正則表達(dá)式工具RegexBuddy時(shí)發(fā)現(xiàn)他的教程寫的非常好,可以說(shuō)是我目前見(jiàn)過(guò)最好的正則表達(dá)式教程。于是一直想把他翻譯過(guò)來(lái)。這個(gè)愿望直到這個(gè)五一長(zhǎng)假才得以實(shí)現(xiàn),結(jié)果就有了這篇文章。關(guān)于本文的名字,使用“深入淺出”似乎已經(jīng)太俗。但是通讀原文以后,覺(jué)得只有用“深入淺出”才能準(zhǔn)確的表達(dá)出該教程給我的感受,所以也就不能免俗了。??????本文是JanGoyvaerts為RegexBuddy寫的教程的譯文,版權(quán)歸原作者所有,歡迎轉(zhuǎn)載。但是為了尊重原作者和譯者的勞動(dòng),請(qǐng)注明出

2、處!謝謝!?1.?????什么是正則表達(dá)式基本說(shuō)來(lái),正則表達(dá)式是一種用來(lái)描述一定數(shù)量文本的模式。Regex代表RegularExpress。本文將用<>來(lái)表示一段具體的正則表達(dá)式。一段文本就是最基本的模式,簡(jiǎn)單的匹配相同的文本。?2.?????不同的正則表達(dá)式引擎正則表達(dá)式引擎是一種可以處理正則表達(dá)式的軟件。通常,引擎是更大的應(yīng)用程序的一部分。在軟件世界,不同的正則表達(dá)式并不互相兼容。本教程會(huì)集中討論P(yáng)erl5類型的引擎,因?yàn)檫@種引擎是應(yīng)用最廣泛的引擎。同時(shí)我們也會(huì)提到一些和其他引擎的區(qū)別。許多近代的引擎都很類似,但不完全一樣。例如.NET正則庫(kù),JDK正則包。?3.?????

3、文字符號(hào)最基本的正則表達(dá)式由單個(gè)文字符號(hào)組成。如<>,它將匹配字符串中第一次出現(xiàn)的字符“a”。如對(duì)字符串“Jackisaboy”?!癑”后的“a”將被匹配。而第二個(gè)“a”將不會(huì)被匹配。正則表達(dá)式也可以匹配第二個(gè)“a”,這必須是你告訴正則表達(dá)式引擎從第一次匹配的地方開(kāi)始搜索。在文本編輯器中,你可以使用“查找下一個(gè)”。在編程語(yǔ)言中,會(huì)有一個(gè)函數(shù)可以使你從前一次匹配的位置開(kāi)始繼續(xù)向后搜索。類似的,<>會(huì)匹配“Aboutcatsanddogs”中的“cat”。這等于是告訴正則表達(dá)式引擎,找到一個(gè)<>,緊跟一個(gè)<>,再跟一個(gè)<>。要注意,正則表達(dá)式引擎缺省是大小寫敏感

4、的。除非你告訴引擎忽略大小寫,否則<>不會(huì)匹配“Cat”。?·???????特殊字符對(duì)于文字字符,有11個(gè)字符被保留作特殊用途。他們是:[]^$.

5、?*+()這些特殊字符也被稱作元字符。如果你想在正則表達(dá)式中將這些字符用作文本字符,你需要用反斜杠“”對(duì)其進(jìn)行換碼(escape)。例如你想匹配“1+1=2”,正確的表達(dá)式為<<1+1=2>>.需要注意的是,<<1+1=2>>也是有效的正則表達(dá)式。但它不會(huì)匹配“1+1=2”,而會(huì)匹配“123+111=234”中的“111=2”。因?yàn)椤?”在這里表示特殊含義(重復(fù)1次到多次)。在編程語(yǔ)言中,要注意,一些特殊的字符會(huì)先被編譯器處理,然

6、后再傳遞給正則引擎。因此正則表達(dá)式<<1+2=2>>在C++中要寫成“1\+1=2”。為了匹配“C:temp”,你要用正則表達(dá)式<>。而在C++中,正則表達(dá)式則變成了“C:\\temp”。?·???????不可顯示字符可以使用特殊字符序列來(lái)代表某些不可顯示字符:<>代表Tab(0x09)<>代表回車符(0x0D)<<>>代表?yè)Q行符(0x0A)要注意的是Windows中文本文件使用“r”來(lái)結(jié)束一行而Unix使用“”。?4.?????正則表達(dá)式引擎的內(nèi)部工作機(jī)制知道正則表達(dá)式引擎是如何工作的有助于你很快理解為何某個(gè)正則表達(dá)式不像你期望的

7、那樣工作。有兩種類型的引擎:文本導(dǎo)向(text-directed)的引擎和正則導(dǎo)向(regex-directed)的引擎。JeffreyFriedl把他們稱作DFA和NFA引擎。本文談到的是正則導(dǎo)向的引擎。這是因?yàn)橐恍┓浅S杏玫奶匦?,如“惰性”量詞(lazyquantifiers)和反向引用(backreferences),只能在正則導(dǎo)向的引擎中實(shí)現(xiàn)。所以毫不意外這種引擎是目前最流行的引擎。你可以輕易分辨出所使用的引擎是文本導(dǎo)向還是正則導(dǎo)向。如果反向引用或“惰性”量詞被實(shí)現(xiàn),則可以肯定你使用的引擎是正則導(dǎo)向的。你可以作如下測(cè)試:將正則表達(dá)式<

8、regexnot>>應(yīng)用到字符串“r

9、egexnot”。如果匹配的結(jié)果是regex,則引擎是正則導(dǎo)向的。如果結(jié)果是regexnot,則是文本導(dǎo)向的。因?yàn)檎齽t導(dǎo)向的引擎是“猴急”的,它會(huì)很急切的進(jìn)行表功,報(bào)告它找到的第一個(gè)匹配。?·???????正則導(dǎo)向的引擎總是返回最左邊的匹配這是需要你理解的很重要的一點(diǎn):即使以后有可能發(fā)現(xiàn)一個(gè)“更好”的匹配,正則導(dǎo)向的引擎也總是返回最左邊的匹配。當(dāng)把<>應(yīng)用到“Hecapturedacatfishfo

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。