------- android教育訓練、java教育訓練、期待與您交流! ----------
1什麼是正規表達式
正規表達式就是具有一定規則的字元串,正規表達式是用操作字元串的。
正規表達式的規則:
如:
[123],表示某一位必須是123.
[a-zA-Z]表示某一位必須是A—Z的大小寫字母。
[a-m[q-z]]表示某一位必須是a-m或q-z小寫字母。
[a-z&&[^def]]表示某一位必須是a-z除了def.的小寫字母。
[a-z&&[^l-q]]表示某一位必須是a-z除了l-q的小寫字母。
[^012]表示某一位不能是012數字。
[a-z&&[def]]表示某一位隻能是def小寫字母。
預定義字元
\d表示0-9數字。
\D表示[^0-9]
\w表示[a-zA-Z_0-9]
\W表示不能是大小寫字母,數字和下劃線:[^\w]。
\s表示空白字元
\S表示不能是空白字元:[^\s]
.表示任意字元。
注意:在使用下面有反斜線的表達式時,,因為反斜線屬于轉義字元,必須要再加上一個反斜線對其進行轉意。如:
“\\d”.
邊界比對器 | |
^ | 行的開頭 |
$ | 行的結尾 |
\b | 單詞邊界 |
\B | 非單詞邊界 |
\A | 輸入的開頭 |
\G | 上一個比對的結尾 |
\Z | 輸入的結尾,僅用于最後的結束符(如果有的話) |
\z | 輸入的結尾 |
Greedy 數量詞 | |
X? | X,一次或一次也沒有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超過 m 次 |
正規表達式是用來操作字元串的,可以進行以下幾種操作:比對、切割、替換、擷取。
1, 比對
調用String類的matches(String regex);方法,用字元串和指定的正則進行比對。傳回值為boolean,為true表示字元串和正規表達式相比對,否則不比對。
如:
定義比對手機号的正規表達式:要求,第一位不能是0,第二位隻能是3,4,5,8。
public class RegexDemo {
public static void main(String[] args) {
String regex="1[3458]\\d{9}";
String str="13834530020";
System.out.println(str.matches(regex));//true
}
}
比對使用者名:要求,不能以數字開頭,必須是 5 - 15 位。
public class RegexDemo {
public static void main(String[] args) {
String regex="[^\\d][\\w]{4,14}";
String str="michlejackson";
String str1="00abcdef";
System.out.println(str.matches(regex));//true
System.out.println(str1.matches(regex)); //false
}
}
2, 切割
調用String類中的String[] split(String regex);方法對字元按指定的正規表達式進行切割,傳回一個字元串數組。
如:
public class RegexDemo {
public static void main(String[] args) {
//将包含不固定數量空格的姓名字元串,将空格去除。
String str="zhangsan lisi wangcai";
String regex=" +";//表示空格數出現一次或多次。
String [] arr=str.split(regex);
for(String s:arr){
System.out.println(s);
}
}
}
/*列印結果:
zhangsan
lisi
wangcai
*/
public class RegexDemo {
public static void main(String[] args) {
//将姓名字元串中的字線去除。
String str="張三ooooooo李四bbbbb旺财";
String regex="(.)\\1+";//将任意字元定義為組,第二位使用重複第一組内容,重複一次或多次。
String [] arr=str.split(regex);
for(String s:arr){
System.out.println(s);
}
}
}
/*列印結果:
張三
李四
旺财
*/
3,替換
調用 String類中的replaceAll(String regex,String str);用指定的字元串,替換比對指定正規表達式的字元串。
如:
public class RegexDemo {
public static void main(String[] args) {
//将姓名字元串中的一人疊詞替換多個疊詞。
String str="張三ooooooo李四bbbbb旺财";
String regex="(.)\\1+";//将任意字元定義成組,第二位重複第一位的内容,重複多次。
str=str.replaceAll(regex, "$1");//$1表示,使用第一組的内容。
System.out.println(str);
}
}
/*列印結果:
張三o李四b旺财
*/
4,擷取
要擷取比對正規表達式的字元串,需要調用Matcher對象中的group()方法,是以這裡可以先将正規表達式封裝成Pattern對象,再通過此對象的matcher(String str)方法,擷取Matcher對象。
如:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo {
public static void main(String[] args) {
//擷取字元串中三個字母的字元串。
String str="abc fafa afaei ppp opo ip oopp oe4 33 eee iii";
Pattern p=Pattern.compile("\\b[a-z0-9]{3}\\b");
Matcher m=p.matcher(str);
while(m.find()){
System.out.println(m.group());
}
}
}
/*
列印結果:
abc
ppp
opo
oe4
eee
iii
*/