正则表达式
正则表达式-简单版
符号解析
符号 | 意义 | 实例 | 解释 |
---|---|---|---|
[] - | []匹配括号内的符号,- 连字符代表区间 | [a-z] | 匹配a-z之间的字母 |
^ | ^不匹配的字符 | [^a-z] | 不匹配a-z之间的字母 |
. | . 匹配\n以外的任意字符,注意:若是单纯要匹配一个. 应该转义 \\. | a.c | 匹配如abc的字符,长度为3 |
\\d | 匹配单个数字,等于[0-9] | \\d | 匹配3个数字,如123 |
\\D | 匹配单个非数字,等于[ ^0-9] | \\D | 匹配3个非数字,如abc |
\\w | 匹配单个数字及大小写字母,等于[0-9a-zA-Z] | \\d\\w | 匹配一个数字开头,后接一个数字大小写字母,如1a、11 |
\\W | 等于[ ^0-9a-zA-Z] | \\d\\W | 匹配一个数字开头,后接一个f非数字大小写字母,如1# |
\\s | 匹配任何空白字符,如空格制表符 | ||
\\S | 与上者相反 | ||
* | 匹配0次以上(包含0次) | (abc)*,abc* | 前者匹配abc 0次以上,可有可没有;后者匹配一定有ab,c可有可无 |
+ | 匹配1次以上(包含一次) | a+(abc)* | 匹配至少一个a开头,后接abc 0个以上 |
? | 匹配0次或1次 | a+(abc)* | 匹配至少一个a开头,后面 不接 或者 接1个 abc |
指定匹配几个字符 | [a-z] | 匹配任意在a-z中连起来的3个字符,如jww | |
指定匹配至少n个字符 | [\\w] | 匹配任意在a-z中连起来的3个以上字符,如jww666 | |
指定匹配至少n个至多m个字符 | [\\w] | 匹配任意在a-z中连起来的3个以上5个以下字符,如jww66666 | |
^ | 规定起始字符 | [1]+[0-9] | 匹配字符串只能以至少1个a-z的字母开头接一个数字,如as2dddd |
$ | 规定结束字符 | [a-z]+[0-9]$ | 匹配的字符串只能以至少1个a-z的字母开头接一个数字结尾,如ddddas2 |
\\b | 匹配边界 | jww\\b | jwwisjww |
分组、贪婪、反向引用
分组
(pattern) | 匹配的同时可拿到此组的内容 | (\\d\\d)([a-z]+) | 匹配到11az时候,11为第一组,az为第二组 |
---|---|---|---|
(?:pattern) | 非捕获匹配,不存储,用来简化or字符 | | http(?:😕/|:s//) | 对http://|https://的简化 |
(?=pattern) | 非捕获匹配,只匹配满足条件的,但结果不包含pattern | java(?=1.8|1.7|1.6) | 匹配到满足java1.8或java1.7或java1.6的java字符 |
(!=pattern) | 非捕获匹配,只匹配除条件外的,但结果不包含pattern | java(?=1.8|1.7|1.6) | 匹配到不满足java1.8或java1.7或java1.6的java字符,如java16 |
贪婪
贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配
? | 当此字符紧跟在{ * 、 + 、 ? 、 {n,} 、{n,m} }之后,即为非贪婪匹配 | a+? | 当有字符串aaa时候, a+? 一次只匹配一个a,而a+是匹配全部 |
---|
String content = "19192885";
String rex = "(\\d\\d){1,5}";
Pattern pattern = Pattern.compile(rex);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println(matcher.group(0));
}
控制台打印为
19192885
加了问号后
String content = "19192885";
String rex = "(\\d\\d){1,5}?";
Pattern pattern = Pattern.compile(rex);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println(matcher.group(0));
}
控制台打印
19
19
28
85
{1,5}非贪婪只选择1来匹配,所以每次只匹配一次\\d\\d,即19,下一次匹配后面2个数字19
反向引用
指的是 可以在后面的位置使用先前匹配过的内容
\\1 | \\后接分组 | (\\w)(\\w)\\1\\2 | 表示第三个字符要和第一组相等、第四个字符要和第二组相等,如abab |
---|---|---|---|
(a)\\1 | 匹配5个a |
String content = "188522336556";
String rex = "(\\d)(\\d)\\2\\1";
Pattern pattern = Pattern.compile(rex);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println(matcher.group(0));
}
匹配结果:6556
a-z ↩︎
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南