概述
正則表達式非常強大,能夠解決我們開發時用于匹配一些特定的要求。并且JAVA中還提供了相當強大的方法,擴展其功能性。下面我們就來介紹一下:
1.定義一個關于用戶名的正則表達式
String regex = "[\u4E00-\u9FEF[a-z][A-Z]{2}]\w{6,20}";
2.定義一個關于密碼的正則表達式
String password = "[\w\.]{6,16}";
3. 定義一個關于QQ郵箱的正則表達式
String email = "[\d@qq\.com]{12,16}";
4.兩個用來處理正則表達式的工具類
compile是靜態方法,用于編譯規則返回Pattern對象
matcher用于匹配字符串
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
5.find():判斷字符串是否匹配
6.group():將匹配到的字符串分組
7.start()和end():分別表示第幾輪匹配到的字符串的下標,end()下標自動加1
8.AppendReplacement():用特定的字符串替代匹配到的字符串,并放入其第一個參數 StringBuffer中
9.appendTail():將最后匹配到的字符串的剩余串放入StringBuffer中
應用
package com.bbc.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo {
// 定義一個全局變量用于計數
static int count = 0;
// 定義一個全局變量用于替代
static String replaceStr = "-";
public static void main(String[] args) {
// 定義一個關于用戶名的正則表達式
String regex = "[\u4E00-\u9FEF[a-z][A-Z]{2}]\w{6,20}";
// 定義匹配的子段
String str = "吳dadadadda31da";
// 定義一個關于密碼的正則表達式
String password = "[\w\.]{6,16}";
// 定義匹配的字段
String passwordStr = "dafa........";
// 定義一個關于QQ郵箱的正則表達式
String email = "[\d@qq\.com]{12,16}";
// 定義匹配的字段
String emailStr = "146456416@qq.com";
// 定義一個字段用于測試find方法
String line = "454156135dada ...";
String pattern = "(\d+)([a-z]+)(\s)(.*)";
//定義一個字段用于測試start_end方法
String test = "abc\b";
String testStr = "abc dada abc dad abc ad";
// 定義一個字段用于測試replace方法
String replace = "a*b";
// 定義一個匹配的字段
String replaceStr1 = "aabdadasabdadabbadadaabda";
System.out.println("用戶名:" + judge(regex, str));
System.out.println("密 碼:" + judge(password, passwordStr));
System.out.println("郵 箱:" + judge(email, emailStr));
find(pattern, line);
start_end(test, testStr);
replace(replace,replaceStr1);
}
// 定義一個方法,判斷字符串是否合法
public static boolean judge(String regex, String str) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
return m.matches();
}
// 定義一個方法,獲取字符串的分割點
public static void find(String regex, String str) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if (m.find()) {
System.out.println("value1" + ":" + m.group(0));
System.out.println("value2" + ":" + m.group(1));
System.out.println("value3" + ":" + m.group(2));
System.out.println("value4" + ":" + m.group(3));
System.out.println("value5" + ":" + m.group(4));
}
}
// 定義一個方法,獲取每個分割點的坐標
public static void start_end(String regex , String str){
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while(m.find()){
count++;
System.out.println("第"+ count +"次循環");
System.out.println("start:" + m.start());
System.out.println("end:" + m.end());
}
}
// 定義一個方法,用特定的字段取代匹配的字段
public static void replace(String regex , String str){
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
StringBuffer sb = new StringBuffer();
while(m.find()){
m.appendReplacement(sb, replaceStr);
}
m.appendTail(sb);
System.out.println("sb:" + sb);
}
}
演示
本期內容到此結束,我們下期不見不散!