深入淺出之正則表達(dá)式(一)
2006/11/29 22:14:52
1.      什么是正則表達(dá)式

基本說來,正則表達(dá)式是一種用來描述一定數(shù)量文本的模式。Regex代表Regular Express。本文將用<<regex>>來表示一段具體的正則表達(dá)式。

一段文本就是最基本的模式,簡單的匹配相同的文本。



2.      不同的正則表達(dá)式引擎

正則表達(dá)式引擎是一種可以處理正則表達(dá)式的軟件。通常,引擎是更大的應(yīng)用程序的一部分。在軟件世界,不同的正則表達(dá)式并不互相兼容。本教程會(huì)集中討論P(yáng)erl 5 類型的引擎,因?yàn)檫@種引擎是應(yīng)用最廣泛的引擎。同時(shí)我們也會(huì)提到一些和其他引擎的區(qū)別。許多近代的引擎都很類似,但不完全一樣。例如.NET正則庫,JDK正則包。



3.      文字符號

最基本的正則表達(dá)式由單個(gè)文字符號組成。如<<a>>,它將匹配字符串中第一次出現(xiàn)的字符“a”。如對字符串“Jack is a boy”。“J”后的“a”將被匹配。而第二個(gè)“a”將不會(huì)被匹配。

正則表達(dá)式也可以匹配第二個(gè)“a”,這必須是你告訴正則表達(dá)式引擎從第一次匹配的地方開始搜索。在文本編輯器中,你可以使用“查找下一個(gè)”。在編程語言中,會(huì)有一個(gè)函數(shù)可以使你從前一次匹配的位置開始繼續(xù)向后搜索。

類似的,<<cat>>會(huì)匹配“About cats and dogs”中的“cat”。這等于是告訴正則表達(dá)式引擎,找到一個(gè)<<c>>,緊跟一個(gè)<<a>>,再跟一個(gè)<<t>>。

要注意,正則表達(dá)式引擎缺省是大小寫敏感的。除非你告訴引擎忽略大小寫,否則<<cat>>不會(huì)匹配“Cat”。



·        特殊字符

對于文字字符,有11個(gè)字符被保留作特殊用途。他們是:

[ ] \ ^ $ . | ? * + ( )

這些特殊字符也被稱作元字符。

如果你想在正則表達(dá)式中將這些字符用作文本字符,你需要用反斜杠“\”對其進(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次到多次)。

在編程語言中,要注意,一些特殊的字符會(huì)先被編譯器處理,然后再傳遞給正則引擎。因此正則表達(dá)式<<1\+2=2>>在C++中要寫成“1\\+1=2”。為了匹配“C:\temp”,你要用正則表達(dá)式<<C:\\temp>>。而在C++中,正則表達(dá)式則變成了“C:\\\\temp”。



·        不可顯示字符

可以使用特殊字符序列來代表某些不可顯示字符:

<<\t>>代表Tab(0x09)

<<\r>>代表回車符(0x0D)

<<\n>>代表換行符(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)橐恍┓浅S杏玫奶匦裕纭岸栊浴绷吭~(lazy quantifiers)和反向引用(backreferences),只能在正則導(dǎo)向的引擎中實(shí)現(xiàn)。所以毫不意外這種引擎是目前最流行的引擎。

你可以輕易分辨出所使用的引擎是文本導(dǎo)向還是正則導(dǎo)向。如果反向引用或“惰性”量詞被實(shí)現(xiàn),則可以肯定你使用的引擎是正則導(dǎo)向的。你可以作如下測試:將正則表達(dá)式<<regex|regex not>>應(yīng)用到字符串“regex not”。如果匹配的結(jié)果是regex,則引擎是正則導(dǎo)向的。如果結(jié)果是regex not,則是文本導(dǎo)向的。因?yàn)檎齽t導(dǎo)向的引擎是“猴急”的,它會(huì)很急切的進(jìn)行表功,報(bào)告它找到的第一個(gè)匹配 。



·        正則導(dǎo)

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 岛国大片免费观看| 欧美日韩综合在线视频免费看| 少妇太爽了在线观看| 乱了嗯祖宗啊用力| 欧美视频在线网站| 免费成人在线电影| 羞羞视频免费看| 国产日韩欧美三级| 91传媒蜜桃香蕉在线观看| 女人pp被扒开流水了| 中文字幕无码无码专区| 日韩午夜小视频| 亚洲jizzjizz中国少妇中文 | 我想看一级毛片| 五十路在线播放| 欧美日韩国产三上悠亚在线看| 国产**aa全黄毛片| 韩国亚洲伊人久久综合影院| 国产精华av午夜在线观看| 720lu国产刺激在线观看| 夜夜高潮夜夜爽夜夜爱爱| 七次郎在线视频精品视频| 无码国产成人午夜电影在线观看| 亚洲女初尝黑人巨高清| 波多野结衣在公众被强| 免费大片黄国产在线观看| 经典国产乱子伦精品视频| 国产一区二区三区播放| 都市激情亚洲色图| 国产在线精品美女观看| 国产高清精品入口91| 国产粗话肉麻对白在线播放| 337p欧美日本超大胆艺术裸| 欧美激情综合亚洲五月蜜桃| 免费1夜情网站| 精品久久久久久国产| 又黄又大又爽免费视频| 你懂的在线视频网站| 国产高清美女**毛片| 99爱在线视频| 天天摸天天做天天爽水多|