【Java基础】Java正则表达式的使用



一、正则表达式规则

1.字符类(只匹配一个字符)

[abc] abc中的一个
[^abc] 除了abc外的任意一个
[a-zA-Z],[a-z[A-Z]] a到z或A-Z中的一个
[a-c&&[bdf]] a到c与bdf交集中的一个,即b
[a-e&&[^f-g]] a到e和非f到g的交集

2.预定义字符(只匹配一个字符)

. 任意字符
d 任意数字[0-9]
D 非数字[^0-9]
s 空白字符
S 非空白字符
w 英文字母,数字或下划线
W 等同于[^w],表示一个非单词字符

3.数量词

X? X出现一次或多次
X* X出现零次或多次
X+ X出现一次或多次
X{n} X出现n次
X{n,} X出现至少n次
X{n,m} X出现至少n次,最多m次

二、使用方法

调用字符串的matches方法
1.

public class Test {
    public static void main(String[] args) {
        String s = "abc";
        System.out.println(s.matches("[a-z][a-z][a-z]"));
    }
}
true
public class Test {
    public static void main(String[] args) {
        String s = "abc123456";
        System.out.println(s.matches("[a-z]{3}[0-9]{6}"));
    }
}
true

3.在使用预定义字符时需要在前面加一个转义字符,表示有一个。

public class Test {
    public static void main(String[] args) {
        String s = "abc123456";
        System.out.println(s.matches("\w{9}"));
    }
}
true

也可以将正则表达式中的内容单独作为一个字符串,在使用正则表达式时直接将字符串代入。

public class Test {
    public static void main(String[] args) {
        String s = "abc123456";
        String s1 = "\w{9}";
        System.out.println(s.matches(s));
    }
}

三、例题演示

1.检验一个手机号码是否正确(以数字1开头,长度为11)

public class Test {
    public static void main(String[] args) {
        String s = "12345678910";
        System.out.println(s.matches("[1][0-9]{10}"));
    }
}

2.校验邮箱格式是否正确(开头不能为0,@的左边可以是字母,数字或下划线,@右边到点.之间可以由字母或数字组成,点的右边为字母,如:a12cd_efg@qwe123.com)

public class Test {
    public static void main(String[] args) {
        String s = "a12cd_efg@qwe123.com";
        System.out.println(s.matches("[\w&&[^0]]\w{1,}[@][\w&&[^_]]{1,}[\.][a-z]{1,}"));
    }
}

字符" . " 为什么表示为" ." 。
1.在正则表达式中, “.“有特殊意思,所以匹配”.“时要用转义字符” “,所以在正则表达式中匹配”.“的表达式是” .”, 而在Java中,又是特殊字符, 所以还要进行转义, 所以最终变成" ."
2. .实际上被转义为两次, 在java中被转换为一个’ ‘字符,然后’ .‘被传给正则,.表示对点字符进行转义,使.就表示字符’.',而不使用它在正则中的特殊意义
(来自百度搜索,准确性不能保证)