(Java)常用API(二)正則表示式
阿新 • • 發佈:2018-12-19
【正則表示式 Regular Expression】
概念:一個字串,使用單個字串來描述、定義匹配規則,匹配一系列符合某個句法規則的字串。
作用:常被用來檢索、替換那些符合某個規則的文字
【正則表示式匹配規則】
字元 | 含義 | 舉例 |
x | 代表的是字元x | 匹配規則為"a",那麼需要匹配的字串內容就是"a" |
\\ | 代表的是反斜線字元'\' | 匹配規則為"\",那麼需要匹配的字串內容就是"\" |
\t | 製表符 | 匹配規則為"\t",對應的效果就是產生一個製表符空間 |
\n | 換行符 | 匹配規則為"\n",換行,游標在原有位置的下一行 |
\r | 回車 | 匹配規則為"\r",回車,游標回到下一行行首 |
字元類 | 含義 | 舉例 |
[abc] | 代表的是a、b或c | 匹配規則為"[abc]",需要匹配的內容就是abc中的任一個字元 |
[^abc] | 代表的是除a、b或c意外的任何字元 | 匹配規則為"[^abc]",匹配的是除abc的任一個字元 |
[a-zA-Z] | 代表的是a-z或A-Z的字元 | 匹配規則"[a-zA-Z]",需要匹配的是一個大寫或小寫字母 |
[0-9] | 代表的是0-9的數字 | 匹配規則"[0-9]",需要匹配的是一個數字 |
[a-zA-Z_0-9] | 代表的是數字或字母或下劃線 | 匹配規則"[a-zA-Z_0-9]",需要匹配的是其中的任何一個 |
預定義字元類 | 含義 | 舉例 |
. | 代表的是任何字元 | 匹配規則".",需要匹配的是任一個字元,想使用'.',用"\\." |
\d | 代表的是0-9的數字 | 匹配規則"\d",需要匹配的是一個數字 |
\w | 代表的是數字或字母或下劃線 | 同[a-zA-Z_0-9] |
邊界匹配器 | 含義 | 舉例 |
^ | 代表的是行的開頭 | 匹配規則為^[abc][0-9]$,需要匹配的內容從[abc]開始,相當於左雙引號 |
$ | 代表行的尾 | 匹配規則為^[abc][0-9]$,需要匹配的內容以[0-9]這個結束,相當於右雙引號 |
\b | 代表單詞的邊界 | 匹配規則為"\b[abc]\b",代表的是字母a或b或c左右兩邊需要的是非單詞字元[a-zA-Z_0-9] |
數量詞 | 含義 | 舉例 |
x? | 代表的是x出現一次或一次也沒出現 | 匹配規則"a?",需要匹配的內容是一個a,或者一個a也沒有 |
x* | 代表x出現多次獲0次 | |
x+ | 代表x出現一次或多次 | |
x{n} | 代表x出現恰好n次 | |
x{n,} | 代表x出現至少n次 | |
x{n,m} | 代表 的是x出現至少n次,但不超過m次 |
【匹配正確的數字】
匹配正整數 | "\\d+" |
匹配正小數 | "\\d+\\.\\d+" |
匹配負整數 | "-\\d+" |
匹配負小數 | "-\\d+\\.\\d+" |
匹配保留2位小數的正數 | "\\d+\\.\\d{2}" |
匹配保留1-3位小數的正數 | "\\d+\\.\\d{1,3}" |
【匹配合法郵箱】
匹配合法郵箱 | "[a-zA-Z_0-9][email protected][a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]+)+" |
/*
* 檢查郵箱地址是否合法
* [email protected]
* [email protected]
* [email protected]
* [email protected]
* 規則:
* @:前 數字、字母、下劃線 個數不能少於1個
* @:後 數字字母 個數不能少於1個
* .:後 字母
*/
public class Test3 {
public static void main(String[] args) {
checkMail();
}
public static void checkMail(){
String email = "[email protected]";
boolean b = email.matches("[0-9a-zA-Z_][email protected][0-9a-z]+(\\.[a-z]+)+");
System.out.println(b);
}
}
【matches舉例】
/*
* 使用字串類的方法,實現正則規則和字串進行匹配
* String類三個和正則表示式相關的方法
* 1. boolean matches(String 正則的規則)
* "abc".matches("[a]") 匹配成功返回true
*
* 2.String[] split(String 正則表示式)
* "abc".split("a") 使用規則將字串進行切割
*
* 3.String replaceAll(String 字串, String 正則規則)
* "abc0123".replaceAll("[\\d]", "#") 按照正則的規則,替換字串
*
*/
public class Test {
public static void main(String[] args) {
checkQQ();
checkPhone();
}
/*1.檢查QQ號碼是否合法
* 0不能開頭,全數字,位數5-10位
* \\d 相當於[0-9], 代表的是0到9的數字
* \\D 匹配的不是數字
*/
public static void checkQQ(){
String str = "123456";
boolean b = str.matches("[1-9][0-9]{4,9}");
System.out.println(b);
}
/*2.檢查手機號是否合法
* 開頭為1 第二位可以為34578,後面9位為0到9之間的任意數字
*
*/
public static void checkPhone(){
String pho = "18621061763";
boolean b = pho.matches("1[34578][0-9]{9}");
System.out.println(b);
}
}
【split舉例】
public class Test1 {
public static void main(String[] args) {
//split_1();
//split_2();
split_3();
}
/*1.String類方法split對字元進行切割
* 12-3-32-32 按照-進行切割
*/
public static void split_1(){
String str = "12-3-32-32";
//1.按照 - 對字串進行切割
String[] arrstr = str.split("-");
for(int i=0;i<arrstr.length;i++){
System.out.println(arrstr[i]); // 12 3 32 32
}
}
/*2.String類方法split對字元進行切割
* 12 3 32 32 按照 空格進行切割
*/
public static void split_2(){
String str = "12 3 32 32 ";
//2.按照 空格 對字串進行切割
String[] arrstr = str.split(" +"); // " +"刪除一個或多個空格
for(int i=0;i<arrstr.length;i++){
System.out.println(arrstr[i]); // 12 3 32 32
}
}
/*3.String類方法split對字元進行切割
* 192.168.105.27 按照 .進行切割
*/
public static void split_3(){
String str = "192.168.105.27";
//3.按照 . 對IP地址字串進行切割
String[] arrstr = str.split("\\.");
for(int i=0;i<arrstr.length;i++){
System.out.println(arrstr[i]); // 192 168 105 27
}
}
}
【replaceAll舉例】
public class Test2 {
public static void main(String[] args) {
replace_1();
}
/*1.replaceAll(正則規則,替換後新的字串)
* helle1234world7754 將其中的數字替換為#
*/
public static void replace_1(){
String str = "helle1234world7754";
//str = str.replaceAll("[\\d+]", "#"); // helle####world####
str = str.replaceAll("[\\d]+", "#"); // helle#world#
System.out.println(str);
}
}