java中的正則表達式
-
正則表達式:
? 是指一個用來描述或匹配一系列符合某個句法規(guī)則的字符串的單個字符串。
? 其實就是一種規(guī)則,有自己特殊的應(yīng)用。
- 正則表達式用途:
1). 字符串匹配
2). 字符串查找
3). 字符串替換
1. 正則表達式的組成規(guī)則
-
規(guī)則字符在 java.util.regex 包的 Pattern 類中
(Pattern類是正則表達式的編譯表達形式)
-
常見組成規(guī)則:
-
字符
- x 表示字符x
- \ \ 表示一個反斜線 \
- \r 回車
- \n 換行符
-
-
字符類
- [ abc ] a、b或者c (只能是一個出現(xiàn),不能同時匹配)
- [ ^abc ] 任何字符,除了a、b、和 c (否定)
- [ a-zA-Z ] a到z 或者 A到Z,兩頭字母包括在內(nèi)
- [ 0-9 ] 0-9的字符都包括
x|y匹配 x 或 y。例如,'z|food' 匹配"z"或"food"。'(z|f)ood' 匹配"zood"或"food"
-
預(yù)定義字符類
-
.任何字符 (如果就是.本身,那么就用\.表示) -
\d數(shù)字 相當(dāng)于[0-9] -
\D非數(shù)字 相當(dāng)于[ ^0-9 ] -
\s空白字符 相當(dāng)于[ \t\r\n\x0B ] -
\S非空白字符 -
\w單詞字符 相當(dāng)于[ a-zA-Z_0-9 ] (在正則表達式里面表達單詞的東西必須由這些字符組成) -
\W非單詞字符 相當(dāng)于[ ^\w ]
-
-
邊界匹配器
^(行首)匹配輸入字符串開始的位置$(行尾)匹配輸入字符串結(jié)尾的位置-
\b單詞邊界(就是不是單詞字符的地方)
舉例:hello world?haha;xixi
-
數(shù)量詞
-
X?表示X一次或者一次也沒有 -
X*表示X有零次或多次 -
X+表示X一次或者多次 -
X{n}表示X恰好n次 -
X{n,}表示X至少有n次 -
X{n,m}表示X至少n次但不超過m次(兩頭都包括)
-
2. 正則表達式的匹配功能
最常用: String類的 public boolean matches (String regex)
需求:判斷手機號碼是否符合需求
分析(定義手機號碼的規(guī)則):
以'1'開頭
第二位是'3'或者'8'
后面只要是數(shù)字就可以
String regex = "1[38]\\d{9}"; //regex規(guī)則
String userInput = "18449351425";
System.out.println(userInput.matches(regex)); //true
需求: 判斷郵箱是否符合需求
String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+";
3. 正則表達式的分割功能
最常用: String類的 public String[] split (String regex)
public String[] split (String regex)
// 根據(jù)給定的正則表達式的匹配來拆分此字符串
// 所得數(shù)組中不包括結(jié)尾空字符串
// 練習(xí)1
String s1 = "aa bb cc";
String[] str1Array = s1.split(" +");
// 用 字符+ 表示匹配一次或多次該字符
//練習(xí)2
String s2 = "D:\\SchoolCourse\\SoftwareProgram\\java"; //路徑要用兩個/
String[] str2Array = s2.split("\\\\");
// 注意是4個/ 因為在原字符串中就是兩個/
// 注意注意注意?。?!
4. 正則表達式的替換功能
最常用: String類的 public String replaceAll (String regex, String replacement)
? 替換此字符串的所有匹配給定的正則表達式的子字符串
區(qū)別:
- String類 public String replace (String old, String new)
- String類 public String replaceAll (String regex, String replacement)
- StringBuffer類 public StringBuffer replace (int start, int end, String replacement)
5. 正則表達式的獲取功能
需要用到 Pattern類 和 Matcher類 (模式和匹配器)
Matcher類 中的 public boolean find () 方法
使用規(guī)則:
// 模式和匹配器的調(diào)用順序
//1.把正則表達式編譯成模式對象
Pattern p = Pattern.compile("a+b");
//2.通過模式對象得到匹配對象,這時候需要的是被匹配的字符串對象
Matcher m = p.matcher("aaaaab");
//3.調(diào)用匹配器對象的功能(此處為判斷功能)
boolean bb = m.matches();
獲取功能:
獲取下列字符串中由三個字符組成的單詞
"da jia ting wo shuo jin tian yao xia yu bu shang wan zi xi"
String s = "da jia ting wo shuo jin tian yao xia yu bu shang wan zi xi" //定義字符串
String regex = "\\b\\w{3}\\b"; //定義規(guī)則 (一定要注意\\b,保證三字符單詞兩側(cè)是單詞邊界)
Pattern p = Pattern.compile(regex); //把規(guī)則編譯成模式對象
Matcher m = p.matcher(s); //通過模式對象得到匹配器對象
// 調(diào)用匹配器對象的功能 (此處是獲取功能)
// 通過 Matcher的find()方法,來查找有沒有符合條件的字串
boolean flag = m.find();
//如何得到值呢? 通過Matcher的group()方法
String substr1 = m.group();
// 因此完整代碼如下:
while (m.find()) {
System.out.println(m.group());
}
注意事項:
- 一定要先find() ,然后才能group();
6. Matcher類常用方法
6.1 尋找匹配方法
尋找匹配方法用來檢查輸入字符串是否匹配,并返回一個布爾值,表示是否找到該模式
public boolean matches ()
// 嘗試將整個區(qū)域與末是匹配
public boolean find ()
// 嘗試查找與該模式匹配的輸入序列的下一個子序列
當(dāng)使用matches(), find()執(zhí)行匹配操作后,就可以利用以下三個方法得到更詳細的信息.
6.2 詳細信息方法
public String group()
// 返回匹配到的子字符串
public int start()
// 返回匹配到的子字符串在字符串中的索引位置
public int end()
// 返回匹配到的子字符串的結(jié)尾索引的后一位
6.3 替換方法
public String replaceAll(String replacement)