1 regex的概念
正則表達式regex通常被用於判斷語句中,用來檢查某一字符串是否滿足某一格式。正則表達式是含有一些具有特殊意義字符的字符串,這些特殊字符稱爲正則表達式的元字符。例如,“\\d”表示數字0-9之中的任意一個,“\\d”就是一個元字符;“\\w”表示可用作標識符的元字符,但不包括美元符號$。注意:在正則表達式中“.”表示任何一個字符,因此在正則表達式中如果想使用普通意義的點字符“.”,必須使用轉義字符“\”。在正則表達式中可以使用方括號括起來若干個字符來表示一個元字符,該字符可代表方括號中的任何一個字符。例如,reg = "[abc]4",這樣字符串"a4","b4","c4"都是和正則表達式匹配的字符串。在正則表達式中允許使用限定修飾符來限定元字符出現的次數。例如,"A*"代表A可以在字符串中出現0次或者多次,A{n}代表A正好出現n次,A{n,}代表A至少出現n次。正則表達式對字符串的主要操作有:匹配、切割、替換、獲取。正則表達式也可應用於網絡爬蟲程序中。
2 程序示例
package captain;
//該程序利用正則表達式來判斷給定的字符串是否爲合法的郵箱地址。
public class RegexDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//regex是合法郵箱的正則表達式。
// 其中"\\w"是正則表達式的元字符;"+"、"*"和"{2,3}"是正則表達式的限定修飾符。
String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
String str1 = "[email protected]";
String str2 = "captain@126";
String str3 = "126.com";
//String類對象的matches方法用於字符串對象與正則表達式的匹配,返回值爲boolean類型。
if(str1.matches(regex))
System.out.println(str1+"是一個合法的郵箱地址!");
if(str2.matches(regex))
System.out.println(str2+"是一個合法的郵箱地址!");
if(str3.matches(regex))
System.out.println(str3+"是一個合法的郵箱地址!");
}
}
package captain;
//該程序利用正則表達式來判斷字符串text是否爲合法的手機號。
public class RegexDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*regex是合法手機號的正則表達式。
*其中方括號內爲可選數字字符的範圍,\\d是表示0-9任意一個數字的正則表達式元字符,
* {9}表示其限定修飾的字符出現且僅出現9次。
* */
String regex = "1[3458]\\d{9}";
String str1 = "12345678900";
String str2 = "2222222222";
String str3 = "153dhasdda";
String str4 = "15110101010";
//String類對象的matches方法用於字符串對象與正則表達式的匹配,返回值爲boolean類型。
if(str1.matches(regex))//
System.out.println(str1+"是一個合法的手機號。");
if(str2.matches(regex))
System.out.println(str2+"是一個合法的手機號。");
if(str3.matches(regex))
System.out.println(str3+"是一個合法的手機號。");
if(str4.matches(regex))
System.out.println(str4+"是一個合法的手機號。");
}
}
(3)切割操作示例package captain;
//正則表達式切割字符串演示。
public class RegexDemo3 {
public static void main(String[] args) {
String str = "zhao qian sun li";//定義字符串
String regex = " +";//定義用於切割指定格式字符串的regex
String[] strs = str.split(regex);//字符串切割
for(String str1:strs){//遍歷輸出字符串數組
System.out.println(str1);
}
}
}
(4)替換操作示例package captain;
//正則表達式用於字符串替換操作演示。
public class RegexDemo4 {
public static void main(String[] args) {
String str = "I looovvve youuuu !";//定義字符串
str = str.replaceAll("(.)\\1+", "$1");//替換
System.out.println(str);
}
}
(5)獲取操作示例package captain;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//正則表達式用於獲取所有符合規則的子串操作演示。
//注意要用到java.util.regex包中的兩個類:Pattern和Matcher。
public class RegexDemo5 {
public static void main(String[] args) {
String str = "I love you so much !";
String regex = "\\b[a-zA-Z]{4}\\b";//定義用於獲取所有長度爲4的單詞的regex
Pattern p = Pattern.compile(regex);//將regex封裝成對象
Matcher m = p.matcher(str);//通過正則對象獲取匹配器對象
//通過匹配器對象的find()方法和group()方法獲取需要的子序列
while(m.find()){
System.out.println(m.group());
}
}
}