正则表达式
public static void main(String[] args) {
/* 假如现在要求校验一个qq号码是否正确。
规则:6位及20位之内,0不能在开头,必须全部是数字。*/
String qq = "123456789";
System.out.println(qq.matches("[1 - 9]\\d{5,19}"));
}
正则表达式字符类
public static void main(String[] args) {
System.out.println("----------------1---------------------");
System.out.println("a".matches("[abc]"));
System.out.println("z".matches("[abc]"));
System.out.println("ab".matches("[abc]"));
System.out.println("----------------2---------------------");
System.out.println("a".matches("[^abc]"));
System.out.println("z".matches("[^abc]"));
System.out.println("zz".matches("[^abc]"));
System.out.println("zz".matches("[^abc][^abc]"));
System.out.println("----------------3---------------------");
System.out.println("a".matches("[a-zA-Z]"));
System.out.println("z".matches("[a-zA-Z]"));
System.out.println("aa".matches("[a-zA-Z]"));
System.out.println("zz".matches("[a-zA-Z]"));
System.out.println("0".matches("[a-zA-Z]"));
System.out.println("----------------4---------------------");
System.out.println("a".matches("[a-d[m-p]]"));
System.out.println("d".matches("[a-d[m-p]]"));
System.out.println("m".matches("[a-d[m-p]]"));
System.out.println("p".matches("[a-d[m-p]]"));
System.out.println("e".matches("[a-d[m-p]]"));
System.out.println("0".matches("[a-d[m-p]]"));
System.out.println("----------------5---------------------");
System.out.println("a".matches("[a-z&&[def]]"));
System.out.println("d".matches("[a-z&&[def]]"));
System.out.println("0".matches("[a-z&&[def]]"));
System.out.println("----------------6---------------------");
System.out.println("a".matches("[a-z&&[^bc]]"));
System.out.println("b".matches("[a-z&&[^bc]]"));
System.out.println("0".matches("[a-z&&[^bc]]"));
System.out.println("----------------7---------------------");
System.out.println("a".matches("[a-z&&[^m-p]]"));
System.out.println("m".matches("[a-z&&[^m-p]]"));
System.out.println("0".matches("[a-z&&[^m-p]]"));
}
方法名 | 说明 |
---|---|
[abc] | 只能是abc |
[^abc] | 除了abc之外的任何字符 |
[a-zA-Z] | a到z A到Z,包括(范围) |
[a-d[m-p]] | a到d,或m到p |
[a-z&&[def]] | a-z和def的交集。 为:def |
[a-z&&[^bc]] | a-z和非bc的交集。 (等同于[ad-z]) |
[a-z&&[^m-p]] | a到z和除了m到p的交集。 (等同于[a-lq-z]) |
正则表达式预定义字符
public static void main(String[] args) {
System.out.println("----------------1---------------------");
System.out.println("你".matches(".."));
System.out.println("你".matches("."));
System.out.println("你a".matches(".."));
System.out.println("----------------2---------------------");
// 两个\表示一个\
System.out.println("a".matches("\\d"));
System.out.println("3".matches("\\d"));
System.out.println("333".matches("\\d"));
System.out.println("333".matches("\\d\\d\\d"));
System.out.println("----------------3---------------------");
System.out.println("z".matches("\\w"));
System.out.println("2".matches("\\w"));
System.out.println("21".matches("\\w"));
System.out.println("你".matches("\\w"));
System.out.println("_".matches("\\w"));
System.out.println("----------------4---------------------");
System.out.println("你".matches("\\W"));
System.out.println("----------------5---------------------");
System.out.println("2244fsfsf".matches("\\w{6,}"));
System.out.println("224f".matches("\\w{6,}"));
System.out.println("----------------6---------------------");
System.out.println("23dF".matches("[a-zA-Z0-9]{4}"));
System.out.println("23_F".matches("[a-zA-Z0-9]{4}"));
System.out.println("23dF".matches("[\\w&&[^_]]{4}"));
System.out.println("23_F".matches("[\\w&&[^_]]{4}"));
}
方法名 | 说明 |
---|---|
\d | 一个数字:[0-9] |
\D | 非数字:[^0-9] |
\s | 一个空白字符:[\t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | [a-zA-Z_0-9]英文、数字、下划线 |
\W | [^\w]一个非单词字符 |
X? | X,一次或0次 |
X* | X,零次或多次 |
X+ | X+ |
X{n} | X,正好n次 |
X{n,} | X,至少n次 |
X{n,m} | X,至少n但不超过m |
练习一
请编写正则表达式验证用户输入的手机号码是否满足要求。
请编写正则表达式验证用户输入的邮箱号是否满足要求。
请编写正则表达式验证用户输入的电话号码是否满足要求。
public static void main(String[] args) {
//第一部分:1 表示手机号码只能以1开头
//第二部分:[3 - 9] 表示手机号码第二位只能是3-9之间
//第三部分:\\d{9} 表示任意数字可以出现9次,也只能出现9次
String regex1 = "1[3-9]\\d{9}";
System.out.println("13112345678".matches(regex1));
System.out.println("13712345698".matches(regex1));
System.out.println("13612348678".matches(regex1));
System.out.println("13412355678".matches(regex1));
System.out.println("--------------------------------------------------");
String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
System.out.println("023-123456".matches(regex2));
System.out.println("023-72348".matches(regex2));
System.out.println("023-123456789".matches(regex2));
System.out.println("--------------------------------------------------");
String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
System.out.println("323233@qq.com".matches(regex3));
System.out.println("dlei0009@pci.com.cn".matches(regex3));
//24小时的正则表达式
String regex4 = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
}
练习二
请编写正则表达式验证用户名是否满足要求
要求:大小写字母,数字,下划线一共4-16位
请编写正则表达式验证身份证号码是否满足要求
简单要求:18位,前17位任意数字,最后一位可以是数字可以是大写或小写的X
复杂要求:按照身份证号码的格式严格要求
public static void main(String[] args) {
String regex1 = "\\w{4,16}";
System.out.println("zhangsan".matches(regex1));
System.out.println("lisi".matches(regex1));
System.out.println("$123".matches(regex1));
System.out.println("------------------------------------------");
String regex2 = "[1-9]\\d{16}(\\d|X|x)";
String regex3 = "[1-9]\\d{16}[\\dXx]";
System.out.println("41080119930228457x".matches(regex2));
System.out.println("41080119930228457x".matches(regex3));
System.out.println("510807986224872166".matches(regex2));
System.out.println("510807986224872166".matches(regex3));
System.out.println("------------------------------------------");
//在匹配的时候忽略abc的大小写
String regex4 = "(?i)abc";
String regex5 = "a(?i)bc";
String regex6 = "a((?i)b)c";
System.out.println("abc".matches(regex4));
System.out.println("ABC".matches(regex4));
System.out.println("------------------------------------------");
System.out.println("ABC".matches(regex5));
System.out.println("aBC".matches(regex5));
System.out.println("------------------------------------------");
System.out.println("aBC".matches(regex6));
System.out.println("aBc".matches(regex6));
//严格身份证号码要求
String regex7 = "[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0\\d|10|11|12)(?:0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]";
}
符号 | 含义 | 举例 |
---|---|---|
[ ] | 里面的内容出现一次 | [0 - 9] [a - zA - Z0 - 9] |
( ) | 分组 | a (b c) + |
^ | 取反 | [^abc] |
&& | 交集,不能写单个的& | [a-z&&m-p] |
I | 写在方括号外面表示并集 | [a-zA-Z0-9] x I X |
. | 任意字符 | \n 回车符号不匹配 |
\ | 转义字符 | \ \ d |
\ \ d | 0 - 9 | \ \ d+ |
\ \ D | 非0 - 9 | \ \ D+ |
\ \ s | 空白字符 | [ \ t \ n \ x0B \ f \ r] |
\ \ S | 非空白字符 | [^ \ s] |
\ \ w | 单词字符 | [a - zA - Z_0 - 9] |
\ \ W | 非单词字符 | [^ \ w] |
? | 0次或1次 | \ \ d? |
* | 0次或多次 | \ \ d* (abc)* |
+ | 1次或多次 | \ \ d+ (abc)+ |
{ } | 具体次数 | a{7} \ \ d{7,19} |
(?i) | 忽略后面字符的大小写 | (?i)abc |
a((?i)b)c | 只忽略b的大小写 | a((?i)b)c |
Tips
以上学习内容均来自于B站黑马程序员