一、正则表达式规则
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中被转换为一个’ \ ‘字符,然后’ \ .‘被传给正则,.表示对点字符进行转义,使.就表示字符’.',而不使用它在正则中的特殊意义
(来自百度搜索,准确性不能保证)