Java中用到的正则表达式规则在java.util.regex.Pattern类中可以查到。
常用规则有:
1.字符
x 表示字符x。
\\ 表示\ , 第一个\是转义,.*[]^${}\+?|() 都需要转义。
\n 换行符('\u000A')。
\r 回车符('\u000D')。
2.字符类
[abc] 表示字符a或b或c。
[^abc] 表示除字符a,b,c以外的一个字符。
[a-zA-Z] 表示a到z或A到Z的所有字母中的其中。
[0-9] 表示0到9的数字
3.预定义字符类
. 表示任意字符,要表示.本身用\.
\d 表示0-9的数字,与[0-9]相同。
\w 表示单词字符,与[a-zA-Z_0-9]相同 ,字母数字下划线。
4.边界匹配器
^x 表示以x开头。
x$ 表示以x 结尾。如 ^abc$是指abc
\b 表示单词边界,单词字符之间那些非单词字符就是单词边界
5.数量词
x? 表示x出现0次或1次
x* 表示x出现0次到多次
x+ 表示x出现1次到多次
x{n} 表示x出现n次
x{n,} 表示x出现n次或更多次
x{n,m}表示x出现n次到m次
使用举例:
1. 判断功能
检查QQ号码:
package regex;
import java.util.Scanner;
/**
*
* 输入QQ号码,检查是否符合以下规则:
* 1. 5-15位数字
* 2. 不以0开头
*/
public class RegexDemo {
/**
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入QQ号码:");
String qq = sc.nextLine();
System.out.println("检查结果:" + checkQQ(qq));
}
public static boolean checkQQ(String qq) {
// 或者 "[1-9]\\d{4,14}"
return qq.matches("[1-9][0-9]{4,14}");
}
}
2. 分割功能
String类的 String[] split(String regex)
public class SplitDemo {
/**
* @param args
*/
public static void main(String[] args) {
String s = "18-24";
String regex = "-";
String[] strings = s.split(regex);
int startAge = Integer.parseInt(strings[0]);
int endAge = Integer.parseInt(strings[1]);
System.out.println("Start age:" + startAge + " End age:" + endAge);
String a1 = "a,b,c";
String[] arrayString1 = a1.split(",");
for (int i = 0; i < arrayString1.length; i++) {
System.out.println(arrayString1[i]);
}
System.out.println("----------------------");
String a2 = "a.b.c";
String[] arrayString2 = a2.split("\\.");
for (int i = 0; i < arrayString2.length; i++) {
System.out.println(arrayString2[i]);
}
System.out.println("----------------------");
String a3 = "a b c";
String[] arrayString3 = a3.split(" +");
for (int i = 0; i < arrayString3.length; i++) {
System.out.println(arrayString3[i]);
}
System.out.println("----------------------");
String a4 = "C:\\Users\\zhenijia\\Documents\\ECE\\automated_test";
String[] arrayString4 = a4.split("\\\\");
for (int i = 0; i < arrayString4.length; i++) {
System.out.println(arrayString4[i]);
}
System.out.println("----------------------");
}
}
3.替换功能
String类的 String replaceAll(String regex, String replacement) 和 String replaceFirst(String regex, String replacement)
public static void main(String[] args) {
String regex = "a*b";
String replace = "love";
String string = "abaabaaabb";
String replaceAll = string.replaceAll(regex, replace);
String replaceFirst = string.replaceFirst(regex, replace);
System.out.println("replaceAll:" + replaceAll);
System.out.println("replaceFirst:" + replaceFirst);
}
4.查找功能,使用Pattern和Matcher类
public static void main(String[] args) {
// 查找该字符串中的3字母的单词
String s = "jin tian yao xia yu, qing da jia dai hao yu san.";
Pattern p = Pattern.compile("\\b\\w{3}\\b");
Matcher m = p.matcher(s);
// 注意,必须先find,才能group
while (m.find()) {
System.out.println(m.group());
}
}
Pattern和Matcher类也可以做判断,基本格式是这样用:
Pattern p = Pattern.compile("\\b\\w{3}\\b");
Matcher m = p.matcher("jin");
return m.matches();
如果字符串整个匹配正则表达式的,就会返回true。