正規表達式主要是操作字元串的規則,正規表達式對字元串的操作主要有以下幾種應用:
比對 matches:
切割 split:
替換replaceAll(String regex, String replacement):
查找:
指定為字元串的正規表達式必須首先被編譯為此類的執行個體。然後,可将得到的模式用于建立 Matcher 對象,
依照正規表達式,該對象可以與任意字元序列比對。執行比對所涉及的所有狀态都駐留在比對器中,
是以多個比對器可以共享同一模式。 是以,典型的調用順序是
Pattern p = Pattern.compile("正則");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
查找需要使用的對象:
1.Pattern(正則對象)
2.Matcher(比對器對象)
比對器要使用的方法:
1.find() 通知比對器去比對字元串,查找符合規則的字元串的子串。如果能查找到符合規則的字元串,則傳回true,否則傳回false。
2.group() 擷取符合規則的子串
package com.cn.regex;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Author:Liu Zhiyong(QQ:1012421396)
* Version:Version_1
* Date:2016年7月20日10:02:06
* Desc:
正規表達式主要是操作字元串的規則,正規表達式對字元串的操作主要有以下幾種應用:
比對 matches:
切割 split:
替換replaceAll(String regex, String replacement):
查找:
指定為字元串的正規表達式必須首先被編譯為此類的執行個體。然後,可将得到的模式用于建立 Matcher 對象,
依照正規表達式,該對象可以與任意字元序列比對。執行比對所涉及的所有狀态都駐留在比對器中,
是以多個比對器可以共享同一模式。 是以,典型的調用順序是
Pattern p = Pattern.compile("正則");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
查找需要使用的對象:
1.Pattern(正則對象)
2.Matcher(比對器對象)
比對器要使用的方法:
1.find() 通知比對器去比對字元串,查找符合規則的字元串的子串。如果能查找到符合規則的字元串,則傳回true,否則傳回false。
2.group() 擷取符合規則的子串
注意:使用group方法的時候一定要先調用find方法讓比對器去查找符合規則的字元串,否則報錯。
*/
public class Demo3 {
public static void main(String[] args) {
String phone = "18071897425";
matchesPhone(phone);
phone = "0713-29962208";
matchesTel(phone);
String str = "請 叫 我 木 丁 西";
split1(str);
str = "請叫叫叫叫叫叫叫我木丁丁丁丁丁丁丁丁丁西"; //請 我木 西
split2(str);
str = "如有需求請聯系我:18071897425如有需求請聯系我:18071897425如有需求請聯系我:18071897425如有需求請聯系我:18071897425"
+ " 如有需求請聯系我:18071897425如有需求請聯系我:18071897425如有需求請聯系我:18071897425如有需求請聯系我:18071897425";
String replacement = "***";
replaceAll1(str, replacement);
str = "我我我要要要做做項項項項項項項項項項項項項目目";//還原成:我要做項目 把重疊詞替換成單個詞
replacement = "\\1";
replaceAll2(str, replacement);
pattern();
}
//正則對象
public static void pattern() {
String str;
//正則對象。。。。。查找
//找出3個字母組成的單詞
str = "Qing jiao wo mu ding xi, hen gao xing ren shi ni men";
//先要把字元串的正則編譯成正則對象
Pattern p = Pattern.compile("\\b[a-zA-Z]{3}\\b");//加上了邊界比對器
//使用正則對象比對字元串産生一個比對器對象
Matcher m = p.matcher(str);
System.out.println("有符合的字元串嗎?" + m.find());;
while(m.find()){
System.out.print(m.group() + "\t");
}
}
/**
*需求1:編寫一個正規表達式比對手機号。
*1.第一位:1
*2.第二位:3 4 5 7 8
*3.長度:11位
* @param phone
*/
public static void matchesPhone(String phone) {
String regex = "1[34578]\\d{9}";
System.out.println(phone.matches(regex)?"号碼格式正常":"非法手機号");
}
/**
* 需求2:比對固定電話
* 區号-主機号
* 1.區号:首位為0 。。長度3~4位
* 2.主機号:首位不能為0。。長度7~8位
* @param tel
*/
public static void matchesTel(String tel){
String regex = "0\\d{2,3}-[1-9]\\d{6,7}";
System.out.println(tel.matches(regex)?"合法固定電話":"非法固定電話");
}
/**
* 按照空格切割
* @param str
*/
public static void split1(String str){
String regex = " +";
String[] strs = str.split(regex);
System.out.println(Arrays.toString(strs));
}
/**
* 根據重疊詞進行切割
* @param str
*/
public static void split2(String str){
String regex = "(.)\\1+";//如果正則的内容需要被複用,那麼需要對正則的内容進行分組。分組的目的就是為了提高正則的複用性。組号不能指定,組号從1開始。
String[] strs = str.split(regex);
System.out.println(Arrays.toString(strs));
}
/**
* 替換
* @param str
*/
public static void replaceAll1(String str, String replacement){
String regex = "1[34578]\\d{9}";
str = str.replaceAll(regex, replacement);//傳回值就是替換後的結果
System.out.println(str);
}
/**
* 替換
* 如果需要在replaceAll方法正則的外部引用組的内容,那麼是使用"$組号"
* @param str
* @param replacement
*/
public static void replaceAll2(String str, String replacement){
String regex = "(.)\\1+";
// str = str.replaceAll(regex, replacement); //如果需要在replaceAll方法正則的外部引用組的内容,那麼是使用"$組号"
str = str.replaceAll(regex, "$1"); //如果需要在replaceAll方法正則的外部引用組的内容,那麼是使用"$組号"
System.out.println(str);
}
}