正则表达式

正则表达式支持的常用字符

字符解释
任意合法字符任意合法字符,如abc_#等
\u0061匹配对应的Unicode字符a
\t匹配制表符
\n匹配换行符
\r匹配回车符
\f匹配换页符
1
2
3
4
5
6
7
8
public static void main(String[] args) {
System.out.println("test".matches("test")); // true
System.out.println("a".matches("\u0061")); // true
System.out.println("\t".matches("\t")); // true
System.out.println("\n".matches("\n")); // true
System.out.println("\r".matches("\r")); // true
System.out.println("\f".matches("\f")); // true
}

正则表达式中的特殊字符

字符解释
$匹配字符串结尾的字符
^匹配字符串开头的字符
()将括号中的表达式作为一个整体匹配
[]中括号中的表达式匹配单个字符
{}标记前面的表达式的出现频度
*表示前面的表达式不出现或者出现多次
+表示前面的表达式出现一次以上
?表示前面的表达式不出现或者出现一次
.匹配除换行符\n之外的任意一个字符
\用于转义下一个字符,或指定16进制字符、八进制字符
|表示或运算

  注意:在java中,无论是String.matches()Matcher.matches()或者是Pattern.matches()中,^$都不能部分匹配,因为它们会将整个输入字符串与正则表达式进行匹配,所以正则表达式必须匹配整个输入字符串,replaceAll()Matcher.find()可以进行部分匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static void main(String[] args) {
// 将会输出3434
System.out.println("1234".replaceAll("^12", "34"));
// 将会输出1212
System.out.println("1234".replaceAll("34$", "12"));
// 将括号中的所有子表达式作为一个整体,需要完全符合括号中的条件,输出true
System.out.println("123".matches("(123)"));
// 表示单个字符匹配中括号中的任意一个子表达式,输出true
System.out.println("3".matches("[123]"));
// 表示前面的表达式需要出现3次,输出true
System.out.println("121212".matches("(12){3}"));
// 表示前面的表达式至少出现两次,输出true
System.out.println("123123123".matches("(123){2,}"));
// 表示前面的表达式至少出现两次,最多出现三次,输出true
System.out.println("123123123".matches("(123){2,3}"));
// 表示前面的表达式出现0次或者多次,输出true
System.out.println("13".matches("12*3"));
System.out.println("123".matches("12*3"));
System.out.println("1222223".matches("12*3"));
// 表示前面的表达式出现一次或者多次,输出true
System.out.println("123".matches("12+3"));
System.out.println("1222223".matches("12+3"));
// 表示前面的表达式出现0次或一次,输出true
System.out.println("123".matches("12?3"));
System.out.println("13".matches("12?3"));
// 匹配除\n之外的任何字符,输出true
System.out.println("123456".matches(".{6}"));
// 用于转义,输出\
System.out.println("\\");
// 表示或运算,输出true
System.out.println("123".matches("(123)|(456)"));
System.out.println("456".matches("(123)|(456)"));
}

预定义字符

字符解释
.可以匹配任何字符
\d匹配数字0-9
\D匹配除数字0-9以外的字符
\s匹配所有空白字符,包括空格、制表符、回车符、换页符、换行符等
\S匹配所有非空白字符
\w匹配所有单词字符,包括0-9、26个英文字母和下划线_
\W匹配所有非单词字符

方括号表达式

表达式解释
表示枚举[abc]表示匹配a、b、c其中的一个字符
表示范围[a-z]表示匹配a-z范围内的一个字符,[\u0001-\u0006]则表示匹配这个范围内的十六进制Unicode字符,范围可以配合枚举使用,如[a-dm-p]表示匹配范围a-z或者m-p中的字符
表示求否[^abc]表示除a、b、c以外的其他字符
表示与运算[a-z&&[^ach]]表示a-z范围内,除a、c、h外的其他字符
表示并运算与枚举类似,[a-d[m-p]]表示[a-dm-p]
表示或运算[a-d|m-p]表示[a-dm-p]