正则表达式的匹配规则是从左到右按规则匹配,我们首先来看如何使用正则表达式来做精确匹配。

对于正则表达式abc来说,它只能精确地匹配字符串"abc",不能匹配到"ab""abcd""Abc"等其他任何字符串。
如果正则表达式有特殊字符,那就需要用**\**转义。例如,正则表达式a\&c,其中\&是用来匹配特殊字符&的,它能精确匹配到"a&c",但不能匹配"ac""a-c""a&&c"等。
要注意正则表达式在Java代码中也是一个字符串,所以,对于正则表达式**a\&c**来说,对应的Java字符串是a\\&c",因为\也是Java字符串的转义字符,两个\\实际上表示的是一个\

  1. public class Main {
  2. public static void main(String[] args) {
  3. String re1 = "abc";
  4. System.out.println("abc".matches(re1));
  5. System.out.println("abc".matches(re1));
  6. String re2 = "a\\&c"; //对应的正则是 a\&c 匹配的是 "a&c"
  7. System.out.println("a&c".matches(re2));
  8. System.out.println("a-c".matches(re2));
  9. }
  10. }

如果想要匹配非ASCII字符,例如中文,那就用\u####的十六进制表示,例如:a\u548c匹配字符串ac,中文字符的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`匹配非空格

重复匹配

我们用\d可以匹配一个数字,如果要匹配多个数字怎么办?

匹配任意个字符 *

修饰符*可以匹配任意个字符,包括0个字符。

匹配至少一个字符+

+可以匹配至少一个字符。

匹配 0个或一个字符 ?

?可以匹配0个或一个字符,

  • A\d?可以匹配,因为可以是0个字符
  • A01\d?,超过1个字符就不能匹配了

    匹配 指定数量的字符(n个字符) {n}

    精确匹配n个字符,用{n}

  • A333A\d{3}

匹配 n ~ m个字符 用{n,m},边界 包含 n 和 m
A\d{3,5} 可以匹配 A123A1234A12345
匹配至少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