主頁(yè) > 知識(shí)庫(kù) > Further Study of Rugular Expresions第1/2頁(yè)

Further Study of Rugular Expresions第1/2頁(yè)

熱門標(biāo)簽:知名的電話機(jī)器人 百音電話機(jī)器人 湖南企業(yè)智能外呼系統(tǒng)供應(yīng)商 電銷機(jī)器人公司簡(jiǎn)介 福州工作銷售電話機(jī)器人 錫林郭勒盟地圖標(biāo)注位置 RO地圖標(biāo)注app 高德地圖標(biāo)注短信簽約 自制電銷機(jī)器人
小弟便興起了學(xué)一學(xué)re的想法,但小弟天生就比較懶一些,總希望看有沒有些快速學(xué)習(xí)的方式,于是小弟又請(qǐng)出google大神,藉由祂的神 力,小弟在網(wǎng)絡(luò)上找到了jim hollenhorst先生的文章,經(jīng)過了閱讀,小弟覺得真是不錯(cuò),所以就做個(gè)小心得報(bào)告,跟move-to.net的朋 友分享,希望能為各位大大帶來(lái)一丁點(diǎn)在學(xué)習(xí)re時(shí)的幫助。jim hollenhorst大大文章之網(wǎng)址如下,有需要的大大可直接連結(jié)。
  the 30 minute regex tutorial by jim hollenhorst
  http://www.codeproject.com/useritems/regextutorial.asp
  什么是re?
  想必各位大大在做文件查找的時(shí)侯都有使用過萬(wàn)用字符”*”,比如說想查找在windows目錄下所有的word文件時(shí),你可能就會(huì)用”*.doc”這樣的方式來(lái)做查找,因?yàn)椤?”所代表的是任意的字符。re所做的就是類似這樣的功能,但其功能更為強(qiáng)大。
  寫程序時(shí),常需要比對(duì)字符串是否符合特定樣式,re最主要的功能就是來(lái)描述這特定的樣式,因此可以將re視為特定樣式的描述式,舉個(gè)例子來(lái)說,”\ w +”所代表的就是任何字母與數(shù)字所組成的非空字符串(non-null string)。在.net framework中提供了非常強(qiáng)大的類別庫(kù), 藉此可以很輕易的使用re來(lái)做文字的查找與取代、對(duì)復(fù)雜標(biāo)頭的譯碼及驗(yàn)證文字等工作。
  學(xué)習(xí)re最好的方式就是藉由例子親自來(lái)做做看。jim hollenhorst大大也提供了一個(gè)工具程序expresso(來(lái)杯咖啡吧),來(lái)幫助我們學(xué)習(xí)re,下載的網(wǎng)址是http://www.codeproject.com/useritems/regextutorial/expressosetup2_1c.zip。
  接下來(lái),就讓我們來(lái)體驗(yàn)一些例子吧。
  一些簡(jiǎn)單的例子
  假設(shè)要查找文章中elvis后接有alive的文字符串的話,使用re可能會(huì)經(jīng)過下列的過程,括號(hào)是所下re的意思:
  1. elvis (查找elvis)
  上述代表所要查找的字符順序?yàn)閑lvis。在.net中可以設(shè)定乎略字符的大小寫,所以”elvis”、”elvis”或者是”elvis”都是符合 1 所下的re。但因?yàn)檫@只管字符出現(xiàn)的順序?yàn)閑lvis,所以pelvis也是符合1所下的re。可以用2的re來(lái)改進(jìn)。
  2. \belvis\b (將elvis視為一整體的字查找,如elvis、elvis乎略字符大小寫時(shí))
“\b”在re中有特別的意思,在上述的例子中所指的就是字的邊界,所以\belvis\b用\b把elvis的前后邊界界定出來(lái),也就是要elvis這個(gè)字。
  假設(shè)要將同一行里elvis后接有alive的文字符串找出來(lái),此時(shí)就會(huì)用到另外二個(gè)特別意義的字符”.”及”*”?!?”所代表就是除了換行字符的 任意字符,而”*”所代表的是重復(fù)*之前項(xiàng)目直到找到符合re的字符串。所以”.*”所指的就是除了換行字符外的任意數(shù)目的字符數(shù)。所以查找同一行里 elvis后接有alive的文字符串找出來(lái),則可下如3之re。
  3. \belvis\b.*\balive\b (查找elvis后面接有alive的文字符串,如elvis is alive)
  用簡(jiǎn)單之特別字符就可以組成功能強(qiáng)大的re,但也發(fā)現(xiàn)當(dāng)使用越來(lái)越多的特別字符時(shí),re就會(huì)越來(lái)越難看得懂了。
再看看另外的例子
  組成有效的電話號(hào)碼
  假使要從網(wǎng)頁(yè)上收集顧客格式為xxx-xxxx的7位數(shù)字的電話號(hào)碼,其中x是數(shù)字,re可能會(huì)這樣寫。
  4. \b\d\d\d-\d\d\d\d (查找七位數(shù)字之電話號(hào)碼,如123-1234)
  每一個(gè)\d代表一個(gè)數(shù)字。”-”則是一般的連字符號(hào),為避免太多重復(fù)的\d,re可以改寫成如5的方式。
  5. \b\d{3}-\d{4} (查找七位數(shù)字電話號(hào)碼較好的方法,如123-1234)
  在\d后的{3},代表重復(fù)前一個(gè)項(xiàng)目三次,也就是相等于\d\d\d。
  re的學(xué)習(xí)及測(cè)試工具 expresso
  因?yàn)閞e不易閱讀及使用者容易會(huì)下錯(cuò)re的特性,jim大大開發(fā)了一個(gè)工具軟件expresso,用來(lái)幫助使用者學(xué)習(xí)及測(cè)試re,除了上面所述的網(wǎng)址之外,也可以上ultrapico網(wǎng)站(http://www.ultrapico.com)。安裝完expresso后,在expression library中,jim大大把文章的例子都建立在其中,可以邊看文章邊測(cè)試,也可以試著修改范例所下的re,馬上可以看到結(jié)果,小弟覺得非常好用。各位大大可以試試。
  .net中re的基礎(chǔ)概念
  特殊字符
  有些字符有特別的意義,比如之前所看到的”\b”、”.”、”*”、”\d”等?!盶s”所代表的是任意空格符,比如說spaces、tabs、newlines等.?!盶w”代表是任意字母或數(shù)字字符。
  再看一些例子吧
  6. \ba\w*\b (查找a開頭的字,如able)
  這re描述要查找一個(gè)字的開始邊界(\b),再來(lái)是字母”a”,再加任意數(shù)目的字母數(shù)字(\w*),再接結(jié)束這個(gè)字的結(jié)束邊界(\b)。
  7. \d+ (查找數(shù)字字符串)
  “+”和”*”非常相似,除了+至少要重復(fù)前面的項(xiàng)目一次。也就是說至少有一個(gè)數(shù)字。
  8. \b\w{6}\b (查找六個(gè)字母數(shù)字的字,如ab123c)
  下表為re常用的特殊字符
  . 除了換行字符的任意字符
  \w 任意字母數(shù)字字符
  \s 任意空格符
  \d 任意數(shù)字字符
  \b 界定字的邊界
  ^ 文章的開頭,如”^the'' 用以表示出現(xiàn)于文章開頭的字符串為”the”
  $ 文章的結(jié)尾,如”end$”用以表示出現(xiàn)在文章的結(jié)尾為”end”
  特殊字符”^”及”$”是用來(lái)查找某些字必需是文章的開頭或結(jié)尾,這在驗(yàn)證輸入是否符合某一樣式時(shí)特別用有,比如說要驗(yàn)證七位數(shù)字的電話號(hào)碼,可能會(huì)輸入如下9的re。
  9. ^\d{3}-\d{4}$ (驗(yàn)證七位數(shù)字之電話號(hào)碼)
  這和第5個(gè)re相同,但其前后都無(wú)其它的字符,也就是整串字符串只有這七個(gè)數(shù)字的電話號(hào)碼。在.net中如果設(shè)定multiline這個(gè)選項(xiàng),則”^”和”$”會(huì)每行進(jìn)行比較,只要某行的開頭結(jié)尾符合re即可,而不是整個(gè)文章字符串做一次比較。
  轉(zhuǎn)意字符(escaped characters)
  有時(shí)可能會(huì)需要”^”、”$”單純的字面意義(literal meaning)而不要將它們當(dāng)成特殊字符,此時(shí)”\”字符就是用來(lái)移除特殊字符特別意義的字符,因此”\^”、”\.”、”\\”所代表的就是”^”、”.”、”\”的字面意義。
  重復(fù)前述項(xiàng)目
  在前面看過”{3}”及”*”可以用來(lái)重復(fù)前述字符,之后我們會(huì)看到如何用同樣的語(yǔ)法重復(fù)整個(gè)次描述(subexpressions)。下表是使用重復(fù)前述項(xiàng)目的一些方式。
  * 重復(fù)任意次數(shù)
  + 重復(fù)至少一次
  ? 重復(fù)零次或一次
  {n} 重復(fù)n次
  {n,m} 重復(fù)至少n次,但不超過m次
  {n,} 重復(fù)至少n次
  再來(lái)試一些例子吧
  10. \b\w{5,6}\b (查找五個(gè)或六個(gè)字母數(shù)字字符的字,如as25d、d58sdf等)
  11. \b\d{3}\s\d{3}-\d{4} (查找十個(gè)數(shù)字的電話號(hào)碼,如800 123-1234)
  12. \d{3}-\d{2}-\d{4} (查找社會(huì)保險(xiǎn)號(hào)碼,如 123-45-6789)
  13. ^\w* (每行或整篇文章的第一個(gè)字)
  在espresso可試試有multiline和沒multiline的不同。
  匹配某范圍的字符
  有時(shí)需要查找某些特定的字符時(shí)怎么辨?這時(shí)中括號(hào)”[]”就派上了用場(chǎng)。因此[aeiou]所要查找的是”a”、”e”、”i”、”o”、”u”這些 元音,[.?!]所要查找的是”.”、”?”、”!”這些符號(hào),在中括號(hào)中的特殊字符的特別意義都會(huì)被移除,也就是解譯成單純的字面意義。也可以指定某些 范圍的字符,如”[a-z0-9]”,所指的就是任意小寫字母或任意數(shù)字。
  接下來(lái)再看一個(gè)比較初復(fù)雜查找電話號(hào)碼的re例子
  14. \(?\d{3}[( ] \s?\d{3}[- ]\d{4} (查找十位數(shù)字之電話號(hào)碼,如(080) 333-1234 )
  這樣的re可查找出較多種格式的電話號(hào)碼,如(080) 123-4567、511 254 6654等?!盶(?”代表一個(gè)或零個(gè)左小括號(hào)”(“, 而”[( ]”代表查找一個(gè)右小括號(hào)”)”或空格符,”\s?”指一個(gè)或零個(gè)空格符組。但這樣的re會(huì)將類似”800) 45-3321”這樣的電話找出 來(lái),也就是括號(hào)沒有對(duì)稱平衡的問題,之后會(huì)學(xué)到擇一(alternatives)來(lái)決解這樣的問題。
  不包含在某特定字符組里(negation)
  有時(shí)需要查找在包含在某特定字符組里的字符,下表說明如何做類似這樣的描述。
  \w 不是字母數(shù)字的任意字符
  \s 不是空格符的任意字符
  \d 不是數(shù)字字符的任意字符
  \b 不在字邊界的位置
  [^x] 不是x的任意字符
  [^aeiou] 不是a、e、i、o、u的任意字符
  15. \s+ (不包含空格符的字符串)
  擇一(alternatives)
  有時(shí)會(huì)需要查找?guī)讉€(gè)特定的選擇,此時(shí)””這個(gè)特殊字符就派上用場(chǎng)了,舉例來(lái)說,要查找五個(gè)數(shù)字及九個(gè)數(shù)字(有”-”號(hào))的郵政編碼。
  16. \b\d{5}-\d{4}\b\b\d{5}\b (查找五個(gè)數(shù)字及九個(gè)數(shù)字(有”-”號(hào))的郵政編碼)
  在使用alternatives時(shí)需要注意的是前后的次序,因?yàn)閞e在alternatives中會(huì)優(yōu)先選擇符合最左邊的項(xiàng)目,16中,如果把查找五個(gè)數(shù)字的項(xiàng)目放在前面,則這re只會(huì)找到五個(gè)數(shù)字的郵政編碼。了解了擇一,可將14做更好的修正。
12下一頁(yè)閱讀全文

標(biāo)簽:玉林 河北 秦皇島 怒江 吉林 昆明 西寧 茂名

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Further Study of Rugular Expresions第1/2頁(yè)》,本文關(guān)鍵詞  Further,Study,Rugular,Expresions,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Further Study of Rugular Expresions第1/2頁(yè)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Further Study of Rugular Expresions第1/2頁(yè)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章