目录
1 什么是正则表达式
- 正则表达式(regular(有规律的) expression(表达式)),简写为regex;
- 正则表达式是一个字符串;
- 正则表达式定义匹配规则,用来匹配一系列符合这个规则的字符串;
- 在开发中,正则表达式通常被用来检索、替换那些符合某种规则的文本,或者从字符串中提取我们想要的特定部分;
- 正则表达式是一套标准,可以用于任何语言;
- JDK内置正则表达式引擎:java.util.regex
2 正则表达式匹配规则
正则表达式 | 规则 | 可以匹配 |
---|---|---|
^ | 开头 | 字符串开头(在Java中可有可无) |
$ | 结尾 | 字符串结束(在Java中可有可无) |
A | 指定字符 | A |
\u548c | 指定Unicode字符 | 和 |
. | 任意字符 | a, b. &, 0 |
\d | 0-9 | 0,1,2,3,…,9 |
\w | a-z, A-Z, 0-9, _ | a, A, 0, _,… |
\s | 空格、Tab键 | “ ” |
\D | 非\d | a, A, &, _, … |
\W | 非\w | &, @, 中, … |
\S | 非\s | a, A, &, _, … |
[ABC] | […]内任意字符 | A, B, C |
[A-F0-9xy] | 指定范围的字符 | A, …, F, 0,…, 9, x, y |
[^A-F] | 指定范围外的任意字符 | 非A, …, F |
AB|CD | AB或CD | AB, CD |
AB|CD|EFG | AB或CD或EFG | AB, CD, EFG |
AB* | 至少0个字符 | A, AB, ABB, ABBB, … |
AB+ | 至少1个字符 | AB, ABB, ABBB, … |
AB? | 0或1个字符 | A, AB |
AB{3} | 指定个数字符 | ABBB |
AB{1, 3} | 指定范围个数字符 | AB, ABB, ABBB |
AB{2, } | 至少n个字符 | ABB, ABBB,… |
3 Java中涉及正则表达式的常用方法
3.1 判断是否匹配字符串(boolean):String.matches(String regex)
举例:校验qq号码.
1: 要求必须是5-15位数字
2: 0不能开头
代码演示:
String qq = "604154942";
String regex = "[1-9][0-9]{4,14}";
boolean flag = qq.matches(regex);
System.out.println(flag);
true
3.2 拆分字符串(String[]):String.split(String regex)
1
String s = "1h-22-40-65";
String regex = "-";
String[] result = s.split(regex);
System.out.println(Arrays.toString(result));
[1h, 22, 40, 65]
2
String s = "1h 22 40 65";
String regex = " ";
String[] result = s.split(regex);
System.out.println(Arrays.toString(result));
[1h, 22, 40, 65]
3
String s = "1h 22 40 65";
String regex = "\\s";
String[] result = s.split(regex);
System.out.println(Arrays.toString(result));
[1h, , 22, 40, 65]
4
String s = "1h 22 40 65";
String regex = "\\s+";
String[] result = s.split(regex);
System.out.println(Arrays.toString(result));
[1h, 22, 40, 65]
5
String s = "1h, 22;;40 65";
String regex = "[,;\\s]+";
String[] result = s.split(regex);
System.out.println(Arrays.toString(result));
[1h, 22, 40, 65]
3.3 替换字符串(String):String.replaceAll(String regex, String replacement)
String s = "Hello12345World6789012";
String regex = "[0-9]";
String result = s.replaceAll(regex, "*");
System.out.println(result);
Hello*****World*******