深入淺出之正則表達(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亚洲|
免费看美女部位隐私直播|
美女把尿口扒开让男人桶|
国产三级片在线观看|
香蕉大视频在线播放持久|
国产成人精品日本亚洲直接|
男女拍拍拍免费视频网站|