Regex—《Java語言程式設計(基礎篇)》學習日記

來源:互聯網
上載者:User

大過年的,加上室內溫度高(我都穿短袖了,在自己的小屋裡甚至要光膀子),煩躁,感覺學習效率有點低,今天就看了Regex。

書上例4:

假設姓名包括25個字母中的大部分,第一個字母大寫。姓的模式可以描述為

[A-Z][a-zA-Z][1,24]

感覺很怪,一是[a-zA-Z]的用法在常用Regex列表中沒看到(但是確實能用);

另外一點呢,應該是排版錯誤吧,怎麼是25個字母?而且後邊那個[1,24]應該是末尾的數十一道24裡的一個吧,正解貌似應該是{1,24},經手動測試,這是長度限制。

費解啊,沒參照,不知書上印錯了還是我沒懂。

 

還有一句,標識符的模式可以描述為[a-zA-Z_$][//w$],書上介紹的不多,貌似是並列關係,例如[a-zA-Z_$]就是字母或者_或者$。

另Java標識符在2.3節中定義:不能以數字開頭,應該只是規則而已,寫[1-9][a-z][/d]這種其實也能寫出來,所以是把標識符模式描述為...

 

前邊沒仔細看,發現一小規律,好記多了,//d數字,//D非數字。。。。。//w詞的一個字元,//W非詞的一個字元。。//s一個空白字元,//S一個非空白字元,大小寫是互補的

 

 

 

 

 

 

課後複習題:

有幾個看不懂,主要就是那些*  +?那些

package Review_08;

public class Review_8_22 {
 public static void main(String[] args){
  System.out.println("Java".replaceAll("[av]","RX"));//a和v都匹配a and v
  System.out.println("Java".replaceAll("av","RX"));
  System.out.println("Java".replaceAll("[a][v]","RX"));//看不懂的
    System.out.println("Java".replaceFirst("//w*","RX"));//第1個看不懂的

  System.out.println("Java".replaceAll("//w*","RX"));//第2個看不懂的

  System.out.println("Java".replaceAll("//w+","RX"));//第3個看不懂的
  System.out.println("Java".replaceAll("//w+?","RX"));//第4個看不懂的

  System.out.println("Java".replaceFirst("//w+?","RX"));//第5個看不懂的
  
  
 }
}

粘點資料

貪婪與懶惰

當Regex中包含能接受重複的限定符時,通常的行為是(在使整個運算式能得到匹配的前提下)匹配儘可能多的字元。以這個運算式為例:a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。

有時,我們更需要懶惰匹配,也就是匹配儘可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上一個問號?。這樣.*?就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。現在看看懶惰版的例子吧:

a.*?b匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)。

表5.懶惰限定符
代碼/文法 說明
*? 重複任意次,但儘可能少重複
+? 重複1次或更多次,但儘可能少重複
?? 重複0次或1次,但儘可能少重複
{n,m}? 重複n到m次,但儘可能少重複
{n,}? 重複n次以上,但儘可能少重複

 

 

為什麼第一個匹配是aab(第一到第三個字元)而不是ab(第二到第三個字元)?簡單地說,因為Regex有另一條規則,比懶惰/貪婪規則的優先順序更高:最先開始的匹配擁有最高的優先權——The match that begins earliest wins。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.