本文主要介紹Java—正則表達式(Pattern類和Matcher類)的使用。 ...
正則表達式介紹
正則表達式可以用於對字元串的處理,相當於是一個匹配字元串的模板。主要包含查找、替換、分割、提取等操作;Java中通過Pattern
和Matcher
類提供對正則的支持。
字元處理
特殊字元處理
對於特殊字元:$
、^
、(
、)
、[
、]
、 {
、}
、 *
、 +
、 ?
、 .
、\
、|
前面都要加上\
進行轉義。
預定義字元
預定義字元即為正則表達式中的“通配符”,就是可以匹配多個字元的特殊字元。
|預定義字元|作用|
|-|-|
|.|匹配任意字元|
|\d|digit,代表數字,匹配0-9中的所有數字|
|\D|匹配非數字|
|\s|space,代表空白,匹配所有空白字元(空格、換行、回車、換頁、製表符等)|
|\S|匹配所有非空白字元|
|\w|word,代表單詞,匹配所有單詞字元,包含0-9所有數字、26個英文字母以及下劃線"_"|
|\W|匹配所有非單詞字元|
三種模式的數量表示符
- 貪婪模式:Greedy,數量表示符預設為貪婪模式,會一直匹配下去,直到無法匹配為止。
- 勉強模式:Reluctant,用問號
?
尾碼表示,只會匹配最少的字元,也被稱為最小匹配模式。 - 占有模式: Possessive, 用加號
+
尾碼表示。
貪婪模式 | 勉強模式 | 占用模式 | 作用 |
---|---|---|---|
X? | X?? | X?? | X表達式出現0次或1次 |
X* | X*? | X*? | X表達式出現0次或多次 |
X+ | X+? | X+? | X表達式出現1次或多次 |
X{n} | X{n}? | X{n}? | X表達式出現n次 |
X{n,} | X{n,}? | X{n,}? | X表達式最少出現n次 |
X{n,m} | X{n,m}? | X{n,m}? | X表達式最少出現n次,最多出現m次 |
方括弧表達式
方括弧表達式含義 | 作用 |
---|---|
枚舉 | [abcd],表示a、b、c、d中的任意一個字元; |
範圍:- | [a-e],表示從a到e字母中的任意字母;可結合枚舉進行使用,[a-eu-z],表示從a到e,從u到z範圍內的任意字元 |
否定:^ | [^abcd],表示不是a、b、c、d中的字元;[^a~e]表示不是a至f範圍的字元 |
與運算:&& | [a-g&&[bch],求a~z和bch的交集,則結果為bc |
並運算 | [a-e[h-j]] |
正則表達式的使用
String類常用方法
String類
中的查找、替換、分割、提取等操作方法
boolean matches(String regex)
:判斷該字元串是否匹配指定的正則表達式;String replaceFirst(String regex, String replaceStr)
:將該字元串中第一個匹配regex的子串替換成replaceStr;String replaceAll(String regex, String replaceStr)
:將該字元串中所有匹配regex的子串替換成replaceStr;String[] split(String regex)
:以regex作為分隔符對字元串進行分割;
Matcher類常用方法
find()
:返回目標字元串中是否包含與Pattern匹配的子串,若傳入int類型的參數,則從該int索引處向下搜索;group()
:返回上一次與Pattern匹配的子串;start()
:用於確定子串在目標字元串中的位置;返回上一次與Pattern匹配的子串在目標字元串中的開始位置;end()
:用於確定子串在目標字元串中的位置;返回上一次與Pattern匹配的子串在目標字元串中的結束位置加1;matches()
:判斷整個目標字元串與Pattern是否匹配,要求整個字元串都和Pattern完全匹配時才會返回true;lookingAt
:返回目標字元串首碼與Pattern是否匹配,只需要字元串以Pattern開頭就返回true;reset()
:將現有的Matcher對象應用於一個新的字元序列;
Pattern對象用法
Pattern是不可變類,是正則表達式編譯後在記憶體中的表示形式,在Java中使用正則表達式字元串必須要先被編譯為Patter對象,然後再使用Pattern對象創建對應的Matcher對象。
用法
// 編譯正則表達式為Pattern對象
Pattern pattern = Pattern.compile("bc*d");
// 使用編譯好的Pattern對象創建Matcher對象
Matcher m = p.matcher("bccccd");
boolean b = m.matches();
System.out.println(b);
結果
true
上述步驟等價於
boolean b = Pattern.matches("bc*d", "bccccd");
System.out.println(b);