正則表達式

正則表達式:
    ^: 指定字符串開始
    $: 指定字符串結束

    快捷方式:
        \d  匹配1個 數字
        \w  匹配1個 字母,數字,下劃線
        \s  匹配1個 空白字符
        \b  不會消耗任何字符只匹配一個位置,常用於匹配單詞邊界
        .   匹配除了換行符以外的任何單個字符

    取反快捷方式:
        \W  匹配任意不是字母,數字,下劃線 的字符
        \D  匹配任意非數字的字符
        \S  匹配任意不是空白符的字符
        \B  匹配不是單詞開頭或結束的位置

    區間:
        [0-9]
        [a-z]
        [A-Z]
        [A-Za-z]
        [abs] a b s 中的一個

    量詞:
        *     0個或者多個
        +     一個或者多個
        ?     重複零次或一次
        {N}   重複n次
        {M,N} 重複n到m次
        {,N}
        {M,}  重複M次或更多次

    懶惰限定符:
      "*?"  重複任意次,但儘可能少重複
      如 "acbacb"  正則  "a.*?b" 只會取到第一個"acb" 原本可以全部取到但加了限定符後,只會匹配儘可能少的字符 ,而"acbacb"最少字符的結果就是"acb"

      "+?"  重複1次或更多次,但儘可能少重複
      與上面一樣,只是至少要重複1次

      "??"  重複0次或1次,但儘可能少重複
      如 "aaacb" 正則 "a.??b" 只會取到最後的三個字符"acb"

      "{n,m}?" 重複n到m次,但儘可能少重複
        如 "aaaaaaaa"  正則 "a{0,m}" 因爲最少是0次所以取到結果爲空

      "{n,}?"  重複n次以上,但儘可能少重複
        如 "aaaaaaa"  正則 "a{1,}" 最少是1次所以取到結果爲 "a"


    分組:
        多個字符進行重複怎麼辦呢?此時我們就要用到分組,我們可以使用小括號()來指定要重複的子表達式

        捕獲組:
            捕獲的內容是被存儲在內存中,可供以後使用,比如反向引用就是引用的內存中存儲的捕獲組中捕獲的內容。

        非捕獲組:
            以 (?) 開頭的組是純的非捕獲 組,它不捕獲文本 ,也不針對組合計進行計數。
            就是說,如果小括號中以?號開頭,那麼這個分組就不會捕獲文本,當然也不會有組的編號,因此也不存在Back 引用。
            非捕獲組則不會捕獲文本,也不會將它匹配到的內容單獨分組來放到內存中。所以,使用非捕獲組較使用捕獲組更節省內存。
            匹配indestry或者indestries,可使用 indestr(y|ies) 或 indestr(?:y|ies)
            (?:a|A)123(?:b) 可匹配 a123b 或 A123b

        引用已存在的分組: \N  \1 匹配第一個分組,以此類推,最多99
        命名分組: (?P<group_name>)

    斷言:
        reg(?=exp)  零寬度正先行斷言?=    reg匹配的內容後面內容滿足exp規則

        reg(?!exp)  零寬度負先行斷言?!    reg匹配的內容後面內容不滿足exp規則

        (?<=exp)reg 零寬度正後發斷言?<=    reg匹配的內容前面內容滿足exp規則

        (?<!exp)    零寬度負後發斷言?<!    reg匹配的內容前面內容不滿足exp規則

    常用正則表達式:
        漢字: ^[\u4e00-\u9fa5]{0,}$
        英文和數字: ^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
        中文、英文、數字包括下劃線: ^[\u4E00-\u9FA5A-Za-z0-9_]+$
        Email地址: ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
        匹配IP段,CIDR: ^(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\/([1-9]|[1-2]\d|3[0-2])$
        域名: [a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
        手機號碼: ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
        電話號碼("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX): ^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
        身份證號(15位、18位數字),最後一位是校驗位,可能爲數字或字符X: (^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
        強密碼(必須包含大小寫字母和數字的組合,可以使用特殊字符,長度在8-10之間):  ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
        InternetURL:  [a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
        騰訊QQ號:  [1-9][0-9]{4,} (騰訊QQ號從10000開始)
        中國郵政編碼: [1-9]\d{5}(?!\d) (中國郵政編碼爲6位數字)




















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章