---------------------- 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