黑馬程序員-Java語言基礎–正則表達式 第25天

---------------------- android培訓java培訓、期待與您交流! ----------------------


正則表達式

正則表達式:符合一定規則的表達式。

      作用: 用於專門操作字符串

      特點:用一些特定的符號來表示一些代碼操作,這樣就簡化書寫。所以學習正則表達式就是在學習一些特殊符號的使用。

      好處:可以簡化對字符串的複雜操作

      弊端:符號定義越多,正則越長,閱讀性越差。

對結果進行判斷,定義標記。

具體操作功能:

1、匹配:String類中的matches方法。

用規則匹配整個字符串,只要有一處不符合規則,就匹配結束。返回false。

2、切割:Stringsplit()                                                                            

3、替換:String replaceAll();

4、獲取:將字符串中符合規則的子串取出(獲取指定規則的字符串)  

操作步驟:

      1、現將正在表達式封裝成對象

      2、讓正則表達式和要操作的字符串相關聯。

      3、關聯後,獲取正則匹配引擎。

      4、通過引擎對符合規則的子串進行操作。比如取出。

 

      爲了可以讓規則的結果被重用,可以將規則封裝成一個組,用()表示。

      組的出現都有編號,從1開始,想要使用已有的組可以通過 \n(n就是組的編號)的形式來獲取。

replaceAllDemo(str1,"(.)\\1+","$1");//通過$符號獲取前面一個組。前提是有一個組。                                 

 

4、獲取:

      用到的包是java.util.regex包裏面只有兩個類 :pattern、matcher和一個異常(runtimeexception)類。

   發現:Pattern類沒有構造函數(不讓new對象)。那麼肯定提供方法,而且是靜態的,返回的是本類對象。

static Pattern  compile(String regex)

       //將正則封裝成對象。

           Pattern p = Pattern.compile(reg);//注意大小寫。

           //讓正則對象和要作用的字符串相關聯。獲取匹配器對象

           Matcher m = p.matcher(str);

       //獲取。先找find。再通過group獲取。

       while (m.find())

           {

                 System.out.println(m.group());

           }

典型的調用順序是:

 Pattern p = Pattern.compile(reg);

 Matcher m = p.matcher(str);

 boolean b = m.matches();

其中:Pattern將正則表達字符串編譯封裝,然後調用matcher函數返回一個存放了結果的Matcher匹配器,Matcher裏面有很多的方法,根據要求的不同可以返回不同的結果,而matches是全部匹配,返回布爾值。

import java.util.regex.*;

 

class RegexDemo2

{

      public static void main(String[] args)

      {

           getDemo();

      }

 

      public static void getDemo()

      {

           String str = "ming tian jiu yao fang jia le , da jia.";

 

           String reg = "\\b[a-z]{4}\\b";//  '\b'是邊界判斷

 

           //將正則封裝成對象。

           Pattern p = Pattern.compile(reg);//注意大小寫。

 

           //讓正在對象和要作用的字符串相關聯。獲取匹配器對象。

           Matcher m = p.matcher(str);//正則對象和字符串相關聯。

 

           //其實String類中的matches方法就是用Pattern和Matcher對象完成的。                          

           //只不過被String的方法封裝後,用來較爲簡單,但功能簡單。

           //System.out.println(m.matches());

 

           //boolean b = m.find();//將規則作用到字符串上,並進行符合規則的子串查找。

           //System.out.println(b);

           //System.out.println(m.group());//用於獲取匹配後的結果。

 

           while (m.find())

           {

                 System.out.println(m.group());

                 System.out.println(m.start()+"..."+m.end());

           }

      }         

}

 

X*   沒有或多次

 

到底用四種功能中的哪一個呢?或者哪幾個?思考方式。[day25-06]

思考方式:

      1、如果只想知道該字符串是對是錯,可以使用匹配。

      2、想要將已有的字符串變成另一個字符串,可以替換。

      3、想要按照指定的方式,將字符串變成多個字符串,切割。獲取規則意外的子串。

      4、想要拿到符合需求的字符串子串,獲取。獲取符合規則的子串。

 

常見的QQ號碼校驗程序:

public static void checkQQ()

      {

           String qq = "12345678";

       //步驟分析:

           //第一位:只能是1-9;

           //第二位: 只要是數字就行;

           //第三位:出現的次數是4-14次;大括號中間爲逗號                                                         

           //String regex = "[1-9][0-9]{4,14}";

           String regex = "[1-9]\\d{4,14}";

 

           boolean flag = qq.matches(regex);

           if(flag)

                 System.out.println(qq+"....is ok");

           else

                 System.out.println(qq+"....不合法");

      }

 

切割中用點(.)切割時:使用(\\.)去切割

按多個空格( +)切割時:使用(_+)去切割

 

/*

      匹配手機號:

      手機號段都只有13xxx,15xxx,18xxx

      */

 

      public static void checkTel()

      {

           String tel = "1399999999";          

           String telReg = "1[358]\\d{9}";

           System.out.println(tel.matches(telReg));                                                                     

      }

 

常用的去疊詞替換:

       replaceAllDemo(str1,"(.)\\1+","&");//ert&ui&pu&bn

           //相當於去除重複的。ertyuiopuvbn。前一個規則中的第一個組。

           replaceAllDemo(str1,"(.)\\1+","$1");//通過$符號獲取前面一個組。前提是有一個組。       

 

單詞邊界判斷:‘\b’à "\\b[a-z]{4}\\b"

 

郵箱地址校驗:

/*

      需求:對郵件地址進行校驗。

 

      */

      public static void checkMail()

      {

           String mail = "[email protected]";

 

           String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//或者{1,3}一次到三次//較爲精確的匹配。

           reg= "\\w+@\\w+(\\.\\w+)+";//相對不太精確的匹配

 

           //mail.indexOf("@")!=-1;

                

           System.out.println(mail.matches(reg));

      }

 


---------------------- android培訓java培訓、期待與您交流! ----------------------

詳細請查看:http://edu.csdn.net/heima



 

 

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