Java核心API -- 3(Regex)

來源:互聯網
上載者:User

標籤:Regex

 

1.Regex

    Regex就是使用一系列預定義的特殊字元來描述一個字串的格式規則,然後使用該格式規則匹配某個字串是否符合格式要求。

    1)"."和"\"

        "."點兒,在Regex中表示任意一個字元。 

      "\"在Regex中是轉意字元,當我們需要描述一個已經被Regex使用的特殊字元時,我們就可以通過使用"\"將其轉變為原本的意思。 

        "\"在Regex中也有一些預定義的特殊內容: 

        \d:表示任意一個數字 

        \w:表示任意一個單詞字元(只能是 數字,字母,底線)

        \s:表示任意一個空白字元(\t \r \n \f \x0B)

        \D:表示任意一個非數字字元

        \W:表示任意一個非單詞字元

        \S:表示任意一個非空白字元

    2)"字元集合 [ ]" 

        "[ ]"用來描述單一字元,方括弧內部可以定義這個字元的內容,也可以描述一個範圍。例如: 

        [abc]:表示該字元只能是a或者b或者c 

        [123]:表示該字元只能是1或者2或者3 

        當我們需要描述所有小寫字母時,我們可以使用範圍 [a-z],表示該字元可以是任意一個小寫字母。 

        同樣還可以使用 [0-9] 來表示該字元可以是任意一個數字。 

        也可以在多個範圍內選擇。比如,[a-zA-Z0-9_] 表示該字元可以是任意字母,數字以及"底線"。 

    3)"*"、"+"、"?" 

        通常我們需要描述的字串會有很多重複出現的元素,但又不需要嚴格限制出現的次數時,我們就可以使用"*","+"這些量詞。 

        例如:郵箱地址,那麼在"@"字元前允許出現若干字元作為使用者名稱。這時候我們就可以使用"\w+"來描述這裡至少出現一個單詞字元了。 

        "+":表示內容可以連續出現至少1次以上 

        "*":表示內容出現0-若干次

        "?":表示內容出現0-1次

    4){n}、{n,}{n,m} 

        除了前面講到的量詞外,有時我們也需要要求內容出現的次數有具體要求。比如手機號碼。這時我們要求出現的數字就不能是一個模糊的概念了,而必須要求11位。又比如我們要求使用者輸入密碼時,要求密碼是6-15位。遇到這類問題是,我們可以使用: 

        {n}:表示內容必須出現n次 

        {n,m}:表示內容出現n-m次

        {n,}:表示內容出現至少n次

        例如,\d{11} 就表示數字只能出現11位,這樣就解決了上述的問題。

    5)分組

        在描述電話號碼時,前面有區號,區號的形式可以是0086或者+86,那麼我們如何在這兩個字串之間選擇?這時我們可以使用分組"()"。

        () 可以將內容看做一個整體,()中可以使用"|"來表示或關係。例如,(+86|0086) 表示這裡可以是+86或者0086。

    6)"^"和"$"

        通過在Regex的開始添加"^"以及末尾添加"$"來表示一個整體。若不使用它們,那麼Regex只匹配某個字串的部分內容是否符合格式規則,但使用它們,則要求字串必須從頭到尾都滿足該格式規則。

例如,^\w{ 8,10 }$ 表示整體字串只能出現單詞字元8-10個。

    7)使用Regex需要注意:

        ① 郵箱格式的Regex @無特殊含義,可直接寫,也可[@] 

        ② 使用Java字串去描述Regex的時候,會出現一個衝突,即如何正確描述Regex的“.”。

        起因:

        在Regex中我們想描述一個“.”,但“.”在Regex中有特殊含義,他代表任一字元,所以我們在Regex中想描述“.”的願義就要寫成“\.”但是我們用java字串去描述Regex的時候,因為“.”在java字串中沒有特殊意義,所以java認為我們書寫String s="\.";是有語法錯誤的,因為“.”不需要轉義,這就產生了衝突。

            處理:我們實際的目的很簡單,就是要讓java的字串描述"\."又因為在java中"\"是有特殊含義的,代錶轉義字元我們只需要將"\"轉義為單純的斜杠,即可描述"\."了所以我們用java描述“\.”的正確寫法是String s="\\.";

        ③ 若Regex不書寫^或$,Regex代表匹配部分內容,都加上則表示權匹配。 

    案例4:

        650) this.width=650;" style="width:672px;height:411px;" title="04 clipboard.png" src="http://s3.51cto.com/wyfs02/M02/6D/E6/wKioL1VuxU_ioeyPAANnQLBJlvw820.jpg" width="710" height="421" alt="wKioL1VuxU_ioeyPAANnQLBJlvw820.jpg" />

本文出自 “永遠年輕” 部落格,請務必保留此出處http://kingkongzhao.blog.51cto.com/6319491/1657973

Java核心API -- 3(Regex)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.