正则表达式(JAVA)
文章目录
- 正则表达式(JAVA)
- 用法
- 字符类(只匹配一个字符)
- 预定义字符(只匹配一个字符)
- 数量词
- 贪婪爬取
- 符号
- 捕获分组
- 规则
- 捕获分组
- 符号
- 非捕获分组
- 案例
- 忽略大小写
用法
-
正则表达式在用于校验信息是否满足某些规则的时候,非常的好用
-
在文本中查找满足要求的内容
字符类(只匹配一个字符)
符号 | 作用 | 补充 |
---|---|---|
[abc] | 只能是a,b或c | 匹配的一个字符只能是[] 范围内的其中一个 |
[^abc] | 除了a,b,c之外的任何字符 | ^ 符号类似非 |
[a-zA-Z] | a到z A到Z ,包括范围 | - 作用是由…到… ,两个或多个范围之间不需要任何符号 |
[a-d[m-p]] | a到d,或m到p | 两个[] 之间嵌套表示字符为其中之一 |
[a-z&&[def]] | a-z和def的交集 | && 为交集符号,匹配的字符是交集范围内容 |
[a-z&&[^bc]] | a-z和非bc的交集 | 和上一个基本一致 |
[a-z&&[ ^m-p]] | a-z和除了m到p的交集 | 存在运算优先级 |
- 单个字符匹配JAVA方法:
单个字符.matches(正则表达式)
返回值是布尔类型
预定义字符(只匹配一个字符)
符号 | 作用 | 补充 |
---|---|---|
. | 匹配 任何字符 | |
\d | 匹配 一个数字 | |
\D | 匹配 非数字 | |
\s | 匹配 空白字符 ([\t\n\x0B\f\r]) | |
\w | 匹配 [a-zA-Z_0-9] 英文,数字,下划线 | |
\W | 匹配 [ ^\w] 一个非 英文,数字,下划线 字符 |
-
java中的
\
表示转义字符 -
java匹配预定义字符需要进行转移
-
PS:
"a".matches("\\d")
数量词
- 说明:
X
代表任意字符 - 可以配合上面的内容实现多符号匹配
符号 | 作用 | 补充 |
---|---|---|
X? | X 出现 一次或0次 | |
X* | X 出现 零次或多次 | |
X+ | X 出现 一次或多次 | |
X{n} | X 出现 正好n次 | {} 代表出现的次数 |
X{n, } | X 出现 至少n次 | |
X{n,m} | X 出现 至少n次但不超过m次 |
- PS:
"23dF.matches("[\\w&&[^_]]{4}")"
- 解析: 字符在
\\w
去除_
的条件下,出现4次,所以结果是true
贪婪爬取
- 贪婪爬取: 在爬取数据的时候尽可能多得获取数据
- 符号:
+,*
- PS:
ab+
- 符号:
- 非贪婪爬取: 在爬取数据时尽可能少的获取数据
- 符号:
+?,*?
- PS:
ab*?
- 符号:
符号
符号 | 作用 |
---|---|
` | ` |
&& | 相交 |
\ | 转义字符 |
() | 分组 |
[] | 范围 |
{} | 次数 |
捕获分组
规则
- 规则1: 从1开始
- 规则2: 以左括号为基准,最左边的是第一组,其次是第二组,依次类推
- PS:
(\\d+(\\d+)\\d+)
捕获分组
- 在某些情况下我们并不知道一个统一的标准,只知道一些要求时,需要使用捕获分组,也就是通过捕获某一组的数据,然后再使用
- PS : 判断一个字符串的开始字符和结束字符是否一致
- 举例:
a123a
----> Java正则表达式==>(.).+\\1
- 解释: 后面的
\\1
的意思是拿到第一组的数据复用,这里的1代指第一组 - 理解:
(.+)
每一个.+
直到获取的数据和原来不是同一类型会自动结束
符号
\\
: 内部$
: 外部
非捕获分组
符号 | 作用 |
---|---|
(?:正则) | 获取所有 |
(?=正则) | 获取前面部分 |
(?!正则) | 获取不是指定内容的前面部分 |
- 含义: 分组之后不需要再用本组数据,仅仅是把数据括起来,括起来的表达式不在占用组号
- 更多会使用第一个
案例
忽略大小写
- PS:
"(?i)字符"
表示对后面的字符忽略大小写 System.*out*.println("aB".matches("(?i)ab"));
---->true
(?i)
后面的字符才忽略大小写