深入淺出之正則表達(dá)式
2007/1/8 21:32:26
深入淺出之正則表達(dá)式
前言:
      半年前我對(duì)正則表達(dá)式產(chǎn)生了興趣,在網(wǎng)上查找過不少資料,看過不少的教程,最后在使用一個(gè)正則表達(dá)式工具RegexBuddy時(shí)發(fā)現(xiàn)他的教程寫的非常好,可以說是我目前見過最好的正則表達(dá)式教程。于是一直想把他翻譯過來。這個(gè)愿望直到這個(gè)五一長(zhǎng)假才得以實(shí)現(xiàn),結(jié)果就有了這篇文章。關(guān)于本文的名字,使用“深入淺出”似乎已經(jīng)太俗。但是通讀原文以后,覺得只有用“深入淺出”才能準(zhǔn)確的表達(dá)出該教程給我的感受,所以也就不能免俗了。
      本文是Jan Goyvaerts為RegexBuddy寫的教程的譯文,版權(quán)歸原作者所有,歡迎轉(zhuǎn)載。但是為了尊重原作者和譯者的勞動(dòng),請(qǐng)注明出處!謝謝!  1.      什么是正則表達(dá)式 基本說來,正則表達(dá)式是一種用來描述一定數(shù)量文本的模式。Regex代表Regular Express。本文將用<<regex>>來表示一段具體的正則表達(dá)式。 一段文本就是最基本的模式,簡(jiǎn)單的匹配相同的文本。  2.      不同的正則表達(dá)式引擎 正則表達(dá)式引擎是一種可以處理正則表達(dá)式的軟件。通常,引擎是更大的應(yīng)用程序的一部分。在軟件世界,不同的正則表達(dá)式并不互相兼容。本教程會(huì)集中討論P(yáng)erl 5 類型的引擎,因?yàn)檫@種引擎是應(yīng)用最廣泛的引擎。同時(shí)我們也會(huì)提到一些和其他引擎的區(qū)別。許多近代的引擎都很類似,但不完全一樣。例如.NET正則庫(kù),JDK正則包。  3.      文字符號(hào) 最基本的正則表達(dá)式由單個(gè)文字符號(hào)組成。如<<a>>,它將匹配字符串中第一次出現(xiàn)的字符“a”。如對(duì)字符串“Jack is a boy”。“J”后的“a”將被匹配。而第二個(gè)“a”將不會(huì)被匹配。 正則表達(dá)式也可以匹配第二個(gè)“a”,這必須是你告訴正則表達(dá)式引擎從第一次匹配的地方開始搜索。在文本編輯器中,你可以使用“查找下一個(gè)”。在編程語(yǔ)言中,會(huì)有一個(gè)函數(shù)可以使你從前一次匹配的位置開始繼續(xù)向后搜索。 類似的,<<cat>>會(huì)匹配“About cats and dogs”中的“cat”。這等于是告訴正則表達(dá)式引擎,找到一個(gè)<<c>>,緊跟一個(gè)<<a>>,再跟一個(gè)<<t>>。 要注意,正則表達(dá)式引擎缺省是大小寫敏感的。除非你告訴引擎忽略大小寫,否則<<cat>>不會(huì)匹配“Cat”。  ·        特殊字符 對(duì)于文字字符,有11個(gè)字符被保留作特殊用途。他們是: [ ] \ ^ $ . | ? * + ( ) 這些特殊字符也被稱作元字符。 如果你想在正則表達(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ì)先被編譯器處理,然后再傳遞給正則引擎。因此正則表達(dá)式<<1\+2=2>>在C++中要寫成“1\\+1=2”。為了匹配“C:\temp”,你要用正則表達(dá)式<<C:\\temp>>。而在C++中,正則表達(dá)式則變成了“C:\\\\temp”。  ·        不可顯示字符 可以使用特殊字符序列來代表某些不可顯示字符: <<\t>>代表Tab(0x09) <<\r>>代表回車符(0x0D) <<\n>>代表?yè)Q行符(0x0A) 要注意的是Windows中文本文件使用“\r\n”來結(jié)束一行而Unix使用“\n”。  4.      正則表達(dá)式引擎的內(nèi)部工作機(jī)制 知道正則表達(dá)式引擎是如何工作的有助于你很快理解為何某個(gè)正則表達(dá)式不像你期望的那樣工作。 有兩種類型的引擎:文本導(dǎo)向(text-directed)的引擎和正則導(dǎo)向(regex-directed)的引擎。Jeffrey Friedl把他們稱作DFA和NFA引擎。本文談到的是正則導(dǎo)向的引擎。這是因?yàn)橐恍?/div>
下一頁(yè)
返回列表
返回首頁(yè) 主站蜘蛛池模板: 国产激情一区二区三区四区| 无码专区久久综合久中文字幕| 嘟嘟嘟www在线观看免费高清 | 波多野结衣系列cesd819| 国产一区二区三区不卡av| 日本人强jizzjizz| 国内精品一区二区三区在线观看| 中文乱码人妻系列一区二区| 日韩中文字幕在线一区二区三区| 亚洲日韩乱码中文无码蜜桃臀| 精品国产一区二区三区不卡| 国产乱妇无码大黄aa片| 精品91自产拍在线| 国产精品水嫩水嫩| 99热在线观看精品| 好吊色青青青国产综合在线观看| 久久99精品久久久久久噜噜| 曰批免费视频播放30分钟直播| 亚洲激情视频图片| 玖玖在线资源站| 免费超爽大片黄| 美女黄频视频大全免费的| 国产午夜视频高清| 黑冰女王踩踏视频免费专区| 国产精品乳摇在线播放| 91亚洲欧美综合高清在线| 夜鲁鲁鲁夜夜综合视频欧美| 一级片网站在线观看| 揄拍成人国产精品视频| 久久久噜噜噜久久久午夜| 日韩欧美在线不卡| 亚洲av丰满熟妇在线播放| 欧美日本一道高清免费3区| 亚洲精品无码国产| 狠狠综合久久综合88亚洲| 免费看美女部位隐私直播| 美女把尿口扒开让男人桶| 国产三级片在线观看| 香蕉大视频在线播放持久| 国产成人精品日本亚洲直接| 男女拍拍拍免费视频网站|