文章目录

正则表达式从功能上大致分为
- 限定符:限定出现的次数
- 选择匹配符
- 分组组合和反向引用符
- 特殊字符
- 字符匹配符
- 定位符
元字符-转义符号
当我们使用正则表达式去检索某些特殊字符的时候,需要用到转义字符,否则检索不到结果,甚至会报错。
转义字符:\ 或 \
大多数语言的转移字符是 \ , java中是 \
需要用到转义字符的字符有:. * + ( ) $ / \ ? [ ] ^ { }
字符匹配符
| 符号 | 释义 | 实例 | 解释 |
|---|---|---|---|
| 接收的字符列表 | efkl | e,f,k,l 中的任意一个字符 | |
| \^ | 不接收的字符列表 | \^abc | 除a,b,c之外的任意字符(包括数字和符号) |
| - | 连字符 | A-Z | 任意单个大写字母 |
| . | 匹配出\n 意外的任何字符 | a...b | 以a开头并以b结尾 中间包括两个任意字符的长度为4的字符串。例如 :a47b 、a&*b、aaab |
| \\d | 匹配单个数字字符,相当于0-9 | \\d{3}(\\d)? | 包含3个或4个数字的字符串 例如:996 1024 |
| \\D | 匹配单个非数字字符,相当于\^0-9 | \\D(\\d)* | 以单个非数字开头,后接任意个数字字符。例如:a10086、b2、 |
| \\w | 匹配单个数字、大小写字母字符和_。相当于0-9a-zA-Z_ | \\d{3}\\w{4} | 以3个数字开头的长度为7的字符串。例如:996YYDS、007QNMD、5211314 |
| \\W | 匹配单个非数字、大小写字母字符。相当于\^0-9a-zA-Z | \\D+\\d{2} | 以至少一个非数字字母开头,2个数字结尾的字符串。例如:#*&^29、&99、%100 |
a-z:表示可以匹配 a-z 中任意一个字符。
A-Z:表示可以匹配 A-Z 中任意一个字符。
(?i)abc:表示不区分大小写的匹配 ?i) 后面的字符串

\^a-z:否定匹配
\^A-Z:否定匹配
\^0-9:否定匹配
\^a-z{2}:表示匹配不是小写字母的两个

选择匹配符
| : 匹配"|"之前或者之后的表达式
正则限定符


定位符
| 符号 | 含义 | 示例 | 说明 | 举例 |
|---|---|---|---|---|
| ^ | 指定起始字符 | ^[1](#符号 含义 示例 说明 举例 ^ 指定起始字符 1+[a-z]* 029、9i、996gun、9 指定结束字符 2\\-[a-z]+ 1-a、9-n、0-y \b 匹配目标字符串的边界 snow\b Iamsnow HowAreYou \B 匹配目标字符串的非边界 snow\B 与 上面相反 IamSnowHowAreU)^+a-z* | ![]() |
029、9i、996gun、9 |
| $ | 指定结束字符 | ^[2](#符号 含义 示例 说明 举例 ^ 指定起始字符 1+[a-z]* 029、9i、996gun、9 指定结束字符 2\\-[a-z]+ 1-a、9-n、0-y \b 匹配目标字符串的边界 snow\b Iamsnow HowAreYou \B 匹配目标字符串的非边界 snow\B 与 上面相反 IamSnowHowAreU)^\\-a-z+$ | ![]() |
1-a、9-n、0-y |
| \\b | 匹配目标字符串的边界 | snow\\b | ![]() |
Iamsnow HowAreYou |
| \\B | 匹配目标字符串的非边界 | snow\\B | 与 上面相反 | IamSnowHowAreU |
逻辑运算
- && :并且
- | :或者
java
public class RegexDemo2 {
public static void main(String[] args) {
// 1 要求字符串是除a、e、i、o、u外的其它小写字符开头,后跟ad
System.out.println("vad".matches("[a-z&&[^aeiou]]ad"));
// 2 要求字符串是aeiou中的某个字符开头,后跟ad
System.out.println("aad".matches("[a|e|i|o|u]ad"));
}
}
捕获分组


应用
验证汉字
^[\u0391-\uffe5]+$
验证手机号码
^1[3|4|5|7|8|9][0-9]{9}$



