1. 程式人生 > >正則表示式(Regex)

正則表示式(Regex)

定義:是指一個用來描述或者匹配一系列符合某個語法規則字串的字串 ,其實就是一種規則。、


字元類:   []代表單個字元 

                  [abc]   a 或b或c其中的某一個字元

                  [^abc]   任何字元 除了 a,b,c

                  [a-zA-Z] a到z或A到Z   兩頭的字母都包括在內

                  [a-d[m-p]]  a到d  和m到p(並集)

                  [a-z&&[def]  def    (a-z這個範圍和def這個範圍的交集)

                  [a-z&&[^bc]]   a到z   除了bc

                  [a-z&&[^m-p]]   a到z  除了m-p

預定義字元類:                                  \有轉義的意義 要多加一個\      eg:\\d

                  .   任何字元

                  \d   數字[0-9]     

                  \D  非數字[^0-9]

                  \s 空白字元

                  \S   非空白字元

                  \w單詞字元   [a-zA-Z_0-9]

                  \W非單詞字元


數量詞:

                      X?  X出現一次或一次也沒有

                      X *  X出現零次或多次

                      X + X出現一次或多次

                      X{n} X出現n次

                      X{n,} X出現至少n次

                      X{n,m} X出現至少n次 但不超過m次

正則表示式的分割功能           (String類的方法)

          public static [] split(String regex)     以指定正則表示式去分割字串 返回字串陣列

正則表示式的替換功能 

          public String replaceAll(String regex,String replacement)     引數分別是正則表示式和替換後的字元

正則表示式的分組功能

捕獲組可以通過從左到右計算其開括號來編號。例如,在表示式 ((A)(B(C))) 中,存在四個這樣的組:

1.((A)(B(C)))
2.\A
3.(B(C))
4.(C)

組零始終代表整個表示式。

練習

疊詞 快快樂樂 高高興興

           String regex="(.)\\1(.)\\2";               \\1代表的是第一組(.)出現1次   \\2代表的是第二組(.)出現2次

疊詞 好啦好啦

           String regex="(..)\\1";

按照疊詞切割字串

            String word="sdqqfgkkjhppppkl";

            String [] str=word.split("(.)\\1+");

需求  把字串“我.我.我...要...要...要.學學...編編....編.程...程”   還原成“我要學程式設計”

          String word="我.我.我...要...要...要.學學...編編....編.程...程";

          //先把.字元去掉

          word=word.replaceAll("\\.+"," ");

          //把重複的字元用組中的資料替換掉    $1代表的是組一的值

          String newWord=word.replaceAll("(.)\\1+","$1");


Pattern類和Matcher類

典型的呼叫順序是

 Pattern p = Pattern.compile("a*b");         //獲取正則表示式 
 Matcher m = p.matcher("aaaaab");            //根據正則表示式生成匹配器
 boolean b = m.matches();

獲取功能:

                     //練習 :獲取 字串包含的電話號碼

                      String word="我的電話號碼是13528669636   以前曾經用過 13728470633 和 13342607602";

                      String  regex="1[3578]\\d{0}";              //電話號碼的正則表示式  第一位數字固定 1 第二位  從 3578中一位   後9位都是其他數字

                      Pattern p=Pattern.compile(regex);      //獲取正則表示式

                      Matcher m=m.matcher(word);            //根據正則表示式和要查詢的語句生成匹配器

                      while(m.find())                                     //匹配是否存在符合正則表示式的字串 有就返回true  沒有返回false

                           System.out.println(m.group());       //group()方法把匹配的字串輸出 每次匹配到都會從匹配到的後面開始搜尋


需要特別注意的是:必須先使用find()方法 ,如果在沒有嘗試任何匹配就使用group()方法就會報錯