正則運算式的組成規則
字符
x 字符 x
字符類
[abc] a、b 或 c(簡單類)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(范圍)
預定義字符類
. 任何字符(與行結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\w 單詞字符:[a-zA-Z_0-9]
Greedy 數量詞
X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過 m 次
正則運算式的判斷功能
public boolean matches(String regex) 通知此字串是否匹配給定的正則運算式,
//正確校驗手機號:組成規則是 長度是11,以1開頭,第二位是3或5或8
String tel="158858880644";
//定義規則:1表示第一位只能是1,[358]表示第二位只能是3或5或8,
//剩下的是0--9之間的任意數字,手機號恰好是11位,所以,剩下的恰好是9次
//所以對應寫法就是[0-9]{9}
String regex ="1[358][0-9]{9}";
System.out.println(tel.matches(regex));//如果匹配回傳true
正則運算式的分割功能
public String[] split(String regex) 根據給定的正則運算式的匹配來拆分此字串,
String str ="張三-李四-王五";
//定義規則
String regex="-";
String[] arr = str.split(regex);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
正則運算式的替換功能
public String replaceAll(String regex,String replacement) 使用給定的 replacement 字串替換此字串匹配給定的正則運算式的每個子字串,
String s ="112233";
String s2 = s.replaceAll("11","99");
System.out.println(s+"將11替換為99替換后為:"+s2);
String str="zhangssssqingzzzlun";
String s = str.replaceAll("(.)\1+", "@");
System.out.println(str+"將疊詞替換成@替換后為::"+s);
正則運算式的獲取功能
//取出長度為3的單詞
String str ="da jia hao wo shi zhang qing lun wo cao !";
//將規則封裝成物件,\b表示單詞的邊界,[a-zA-Z]{3}表示字母恰好出現3次
Pattern p = Pattern.compile("\b[a-zA-Z]{3}\b");
//得到匹配器物件
Matcher m = p.matcher(str);
while(m.find()) {//m.find();含有下一個匹配的元素
System.out.println(m.group());//取出匹配的元素
}
正則案例
正則校驗QQ
String qq="1234567894567845678";
//[1-9]表示第一位只能是1--9,不包含0
//[0-9]{4,14}表示0--9至少出現4次,最多出現14次,
//因為要求是5--15次,除去第一位,所以是4--14
String s ="[1-9][0-9]{4,14}";
System.out.println(qq.matches(s));
結果說明:只有滿足該正則的字串回傳值才是true
我們在做測驗時,各種情況都要測驗,也就是我們的測驗:比如:
1.第一位為0的情況
2.長度不足5位或者超出15位
3.含有字母等
4.正確演示
正則校驗手機
//正確校驗手機號:組成規則是 長度是11,以1開頭,第二位是3或5或8
String tel="158858880644";
//定義規則:1表示第一位只能是1,[358]表示第二位只能是3或5或8,
//剩下的是0--9之間的任意數字,手機號恰好是11位,所以,剩下的恰好是9次
//所以對應寫法就是[0-9]{9}
String regex ="1[358][0-9]{9}";
System.out.println(tel.matches(regex));//如果匹配回傳true
結果說明:只有滿足該正則的字串回傳值才是true
測驗時應該涵蓋所有的情況,
正則校驗郵箱
//用戶名@域名
例如:[email protected] [email protected] [email protected]
String email="[email protected]";
//[a-zA-Z_0-9]+@[a-zA-Z0-9]+表示用戶名
//(\.[a-zA-Z]{2,3}){1,3}表示域名,{2,3}表示類似com,cn這樣的域名單詞字符數
{1,3}表示com,cn這樣的域名只能出現1—3次
String regex="[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\.[a-zA-Z]{2,3}){1,3}";
System.out.println(email.matches(regex));
// 結果:true
正則分割字串
String str ="張三---李四------王五-趙六--周七";
//定義規則,"-+"表示"-"出現一次或者多次
String regex="-+";
String[] arr = str.split(regex);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
正則屏蔽敏感詞匯
//手機號隱藏中間四位
String s ="13885888064";
//344型別的手機號,前三位第一組,中四為第二組,后四為第三組
//將中間的用替換,第一種組和第三組不變,不同的正則之間使用組是通過$+組名
String s2 = s.replaceAll("(\d{3})\d{4}(\d{4})", "$1$2");
System.out.println(s2);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/232934.html
標籤:其他
