Regex分組與Pattern正則表達式對象




1.正則規則:
        1.String  regex  =  "[1-9]"          表示單個字符的取值范圍是 1~9,注意是單個字符的取值范圍
        2.String  regex  =  "\\d"          "\d"表示單個字符的類型是整型數字,注意是單個字符的取值范圍
           String  regex  =  "\\D"        "\D"表示單個字符的類型是 非整型數字,"\D" 和 "\d" 是反義
        3.String  regex  =  "\\d{1, 9}"      {最少出現次數, 最多出現次數} 表示 最少出現1個 最多出現9個 的字符是整型數字 
             String  regex  =  "\\d{1}"      {必須出現次數} 表示 必須出現1個 的字符是整型數字
            String  regex  =  "\\d{1,}"      {至少出現次數} 表示 必須至少出現1個 的字符是整型數字
        4.String  regex  =  "[abc]"             表示單個字符的取值范圍是a~c,注意是單個字符的取值范圍
        5.String  regex  =  "[^abc]"        表示單個字符的取值范圍不在a~c,注意是單個字符的取值范圍
        6.String  regex  =  "[a-zA-Z]"    表示單個字符的取值范圍不在a~z 或 A~Z,注意是單個字符的取值范圍
        7.String  regex  =  "[a-z[A-Z]]"(並集)     "[a-z[A-Z]]" 等同於 "[a-zA-Z]",表示單個字符的取值范圍不在a~z 或 A~Z 
         8.String  regex  =  "[a-z&&[def]]"(交集)    表示單個字符的取值為 d 或 e 或 f
         9.String  regex  =  "[a-z&&[^def]]"(減去)    表示單個字符的取值范圍為a~z,但不包括 d 或 e 或 f
         10.String  regex  =  "[a-z&&[d-f]]"(減去)    表示單個字符的取值范圍為a~z,但不在d~f范圍之間
        11.String  regex  =  "..."            "."表示單個字符匹配任意一個字符值
        12.String  regex  =  "\\."            "\\."表示轉義為普通字符"." ;
                            該轉移之后普通字符"." 不再具有 匹配任意一個字符值的作用
        12.String  regex  =  "\\s"            "\s"表示單個字符匹配空白字符
             String  regex  =  "\\S"            "\S"表示單個字符不能匹配空白字符;"\S" 等同於 "^\s";
        13. String  regex  =  "\\w"            "\w"表示單個字符匹配a~z 或 A~Z或 0~9;"\w" 等同於 [a-zA-Z0-9]
               String  regex  =  "\\W"            "\W"表示單個字符不能匹配a~z 或 A~Z或 0~9;"\W" 等同於"^\w"
         14.String  regex  =  "A?"            表示該字符A 必須出現 0次 或 1次
        15.String  regex  =  "A*"            表示該字符A 必須出現 0次 或 多次
        16String  regex  =  "A+"            表示該字符A 必須出現 1次 或 多次


2.group分組:
        1.String  regex  = "((A)(B(C)))":第一個分組是整體((A)(B(C))),第二個分組是(A),第三個分組是(B(C)),第四個分組是(C)
             String  regex  = "(A)\\1":\1 表示 引用(代表)第一個分組(A)
             例子:
                //(.)\\1+:\1 表示 引用的第一個分組(.)匹配出來的數據 可以是 一個或多個,即 (.)\\1+ 相當於 "我+"
                 String  regex  =  "(.)\\1+"
                 String   str  =   "我我我"
                 boolean  b  =   str.matches(regex)//true
                
                 ------------------------------------------------------

                String   str  =   "我我我愛愛愛渚渚渚"
                 // "(.)\\1+":"\1" 表示 引用的第一個分組"(.)"  匹配出來的數據,即 "(.)\\1" 匹配出 "我" ,"(.)\\1+"  匹配出 疊詞  "我+"。
                // 因為后面執行 replaceAll 所以會進行 多次匹配,所以最終"(.)\\1+" 會進行多次匹配,得出 疊詞 "我+"、"愛+"、"渚+"。
                String  regex  =  "(.)\\1+"

                // replaceAll(regex,  "$1")表示把字符串中 所有的符合正則規則的數據 都被替換為 "$1"引用的第一個分組的數據。
                // "$1" 和 "\1" 意思一樣, 都表示 引用 第一個分組"(.)"  匹配出來的數據  "我"、"愛"、"渚"。
                // str.replaceAll(regex,  "$1"):表示把  "(.)\\1+"替換為 "$1",即 "我+"、"愛+"、"渚+" 被分別替換為  "我"、"愛"、"渚"
                 //         regex: "(.)\\1+" 匹配出 疊詞 "我+"、"愛+"、"渚+";
                //         "$1"和 "\1" 都匹配出 "我"、"愛"、"渚"
                 String   newStr  =   str.replaceAll(regex,  "$1") //newStr  為 "我愛渚"


     3.Pattern正則表達式對象:
        1.Pattern  p  =  Pattern.compile(正則表達式字符串):把 正則表達式字符串 封裝為 Pattern正則表達式對象p
         2.Matcher  m  =  p.matcher(String  str“需要進行匹配的”字符串):
            Pattern正則表達式對象調用matcher方法 去匹配 “需要進行匹配的”字符串,返回匹配正確出來的結果m;
            "Matcher  m" 可以包含匹配出來的一個或多個數據;
        3.m.find():判斷 匹配出來的結果數據"Matcher  m" 是否為空
        4.String  str  =  m.group():
            每次只從匹配出來的結果數據"Matcher  m"中 取出一個數據,而"Matcher  m" 可以包含匹配出來的一個或多個匹配到的數據,
            所以需要循環執行 while(m.find()) 每次都判斷結果數據"Matcher  m"中是否還存在數據,如返回true,
            說明剩余有數據可取出,然后執行 String  str  =  m.group() 取出 結果數據"Matcher  m"中的 一個數據,繼續循環判斷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM