正则表达式的匹配规则是从左到右按规则匹配,我们首先来看如何使用正则表达式来做精确匹配。
对于正则表达式abc来说,它只能精确地匹配字符串"abc",不能匹配到"ab","abcd","Abc"等其他任何字符串。
如果正则表达式有特殊字符,那就需要用**\**转义。例如,正则表达式a\&c,其中\&是用来匹配特殊字符&的,它能精确匹配到"a&c",但不能匹配"ac"、"a-c"、"a&&c"等。
要注意正则表达式在Java代码中也是一个字符串,所以,对于正则表达式**a\&c**来说,对应的Java字符串是a\\&c",因为\也是Java字符串的转义字符,两个\\实际上表示的是一个\。
public class Main {public static void main(String[] args) {String re1 = "abc";System.out.println("abc".matches(re1));System.out.println("abc".matches(re1));String re2 = "a\\&c"; //对应的正则是 a\&c 匹配的是 "a&c"System.out.println("a&c".matches(re2));System.out.println("a-c".matches(re2));}}
如果想要匹配非ASCII字符,例如中文,那就用\u####的十六进制表示,例如:a\u548c匹配字符串a和c,中文字符和的Unicode编码是548c。
匹配单个任意字符 .
精确匹配实际上用处不大, 因为我们直接用String.equals()就可以做到。大多数情况下,我们想到的匹配规则更多 是模糊匹配。我们可以用.匹配一个任意字符。
例如,正则表达式a.c中间的.可以匹配一个任意字符,但它不能匹配"ac"、"a&&c",因为.匹配一个字符且仅限一个字符。
匹配数字 \d
如果我们只要匹配0~9这样的数字,可以用\d匹配。例如,正则表达式00\d可以匹配单个数字字符。\D 匹配非数字(匹配 空格、常用字符、特殊字符)
匹配常用字符 \w
用\w可以匹配一个字母、数字或下划线,w的意思是word。它不能匹配"#"、" "、因为\w不能匹配#、空格等字符。\W匹配非常用字符(匹配 空格、数字、特殊字符)
匹配空格、Tab \s
用\s可以匹配一个空格字符,注意空格字符不但包括`,还包括tab字符(在Java中用\t表示)。<br />\S`匹配非空格
重复匹配
匹配任意个字符 *
匹配至少一个字符+
匹配 0个或一个字符 ?
?可以匹配0个或一个字符,
匹配 n ~ m个字符 用{n,m},边界 包含 n 和 mA\d{3,5} 可以匹配 A123、A1234、A12345
匹配至少n个字符可以用{n,}
public class Main {
public static void main(String[] args) {
String re = "\\d";
for(String s : List.of("010-12345678","020-9999999","0755-7654321")) {
if(!s.matches(re)) {
System.out.println("测试失败" + s);
return ;
}
}
for ( String s : List.of("010 12345678","020-9999999","0755-7654.321")){
if(s.mathces(re)) {
System.out.println("测试失败" + s);
return ;
}
}
System.out.println("测试成功!");
}
}
小结
| 正则表达式 | 规则 | 可以匹配 |
|---|---|---|
| A | 指定字符 | A |
| \u548c | 指定Unicode字符 | 和 |
| . | 任意字符 | a,b,&,0 |
| \d | 数字0~9 | 0~9 |
| \w | 大小写字母,数字和下划线 | a~z,A~Z,0~9,_ |
| \s | 空格、Tab键 | 空格,Tab |
| \D | 非数字 | a,A,&,_,…… |
| \W | 非\w | &,@,中,…… |
| \S | 非\s | a,A,&,_,…… |
多个字符的匹配规则
| 正则表达式 | 正则表达式 | 正则表达式 |
|---|---|---|
| A* | 任意个数字符 | 空,A,AA,AAA,…… |
| A+ | 至少1个字符 | A,AA,AAA,…… |
| A? | 0个或1个字符 | 空,A |
| A{3} | 指定个数字符 | AAA |
| A{2,3} | 指定范围个数字符 | AA,AAA |
| A{2,} | 至少n个字符 | AA,AAA,AAAA,…… |
| A{0,3} | 最多n个字符 | 空,A,AA,AAA |
