天天看點

《精通正規表達式》讀書筆記摘要: 第一章 入門(2)

忽略大小寫

如果單純用正規表達式實作對大小寫敏感或忽略的比對模式是完全可以實作的。但對于通常的問題解決來說未免太麻煩了。目前很多工具軟體都提供相關功能設定。也就是說是否忽略大小寫的功能完全沒有必要成為正規表達式的語言的一部分。

使用各種語言或工具中使用參數 i  就表示忽略大小寫的比對,否則就是對大小寫敏感的比對。

如在Javascript中可以這樣設定:var myReg=/[.][0-9a-z]+$/i; 該表達式将可用來比對檔案名的擴充名,如:.mp3 , .doc , .html等,如果不使用i做忽略大小寫的設定,必須改為:var myReg=/[.][0-9a-zA-Z]+$/i;

單詞分界符

顧名思義就是單詞的起始點和結束點,目的就是防止比對的目标出現在另外一個單詞内。

/< 開始分界符

/> 結束分界符

例子:想在目标文本中查找cat,如果用表達式 cat 來比對能夠找到所有的cat,但是也會找到不是預期的結果,如category等。利用單詞分界符可以很好地解決這個問題。/<cat/> 該表達式隻比對cat,如果想比對以cat開頭或結尾的單詞可以這樣:/<cat 比對開頭為cat的單詞,cat/> 比對結尾為cat的單詞。

注意:單詞分界符并不是智能到認識英語單詞,而隻是限定一個連續的字元串而已。可惜并不是所有的工具或語言都支援單詞分界符。  

小結一下:

目前所涉及到的元字元:

 .   任意單個字元

[...] 列出的任意字元

[^...] 未列出的任意字元

^ 行的開始位置

$ 行的結束位置

/< 單詞的開始位置

/> 單詞的結束位置

| 比對分隔兩邊的任意表達式

(...) 限制豎線(|)的作用範圍  

可選項元素

顔色在英語中有兩種寫法:color,colour 如果想把他們全部從目标文本中找出來可使用表達式:(color|colour) 或者 col(o|ou)r 或者 colo(ur|r) 等等。

現在我們多了一種選擇——利用元字元(?)也能解決這個問題,而且更直接簡便。

colou?r

 u?表示此處可以出現u也可以不出現,兩種情況都是比對的預期結果。

是以元字元(?)代表可選項,隻作用于前面緊鄰的元素,注意:這裡說的是元素,而沒說是字元,當然目前的例子是比對字元,字元當然是元素,是以推而廣之?之前可以緊鄰的元素也應該包括表達式,這恰恰是可選元素的強大功能所在。

如果?要作用于表達式,則該表達式必須用()限定成為一個元素,如:July?(fourth|4(th)?) 比對七月四日可能被寫成的格式:

  • July 4
  • Jul 4
  • July fourth
  • Jul fourth
  • Jul 4th
  • July 4th

其他量詞:重複出現

+ (加号)和 * (星号)的作用與問号類似。他們都對前面近鄰的元素進行數量上的限定。

? 表示可有可無,但如果有數量必須是一個

+ 表示至少有一個以上

* 表示從無到有到多個沒有任何數量限定

{min,max} 區間量詞,規定重制次數的範圍

 (待續)

繼續閱讀