Regex分组与Pattern正则表达式对象
1.正则规则:
1.String regex = "[1-9]" 表示单个字符的取值范围是 1~9,注意是单个字符的取值范围
2.String regex = "\\d" "\d"表示单个字符的类型是整型数字,注意是单个字符的取值范围
String regex = "\\D" "\D"表示单个字符的类型是 非整型数字,"\D" 和 "\d" 是反义
3.String regex = "\\d{1, 9}" {最少出现次数, 最多出现次数} 表示 最少出现1个 最多出现9个 的字符是整型数字
String regex = "\\d{1}" {必须出现次数} 表示 必须出现1个 的字符是整型数字
String regex = "\\d{1,}" {至少出现次数} 表示 必须至少出现1个 的字符是整型数字
4.String regex = "[abc]" 表示单个字符的取值范围是a~c,注意是单个字符的取值范围
5.String regex = "[^abc]" 表示单个字符的取值范围不在a~c,注意是单个字符的取值范围
6.String regex = "[a-zA-Z]" 表示单个字符的取值范围不在a~z 或 A~Z,注意是单个字符的取值范围
7.String regex = "[a-z[A-Z]]"(并集) "[a-z[A-Z]]" 等同于 "[a-zA-Z]",表示单个字符的取值范围不在a~z 或 A~Z
8.String regex = "[a-z&&[def]]"(交集) 表示单个字符的取值为 d 或 e 或 f
9.String regex = "[a-z&&[^def]]"(减去) 表示单个字符的取值范围为a~z,但不包括 d 或 e 或 f
10.String regex = "[a-z&&[d-f]]"(减去) 表示单个字符的取值范围为a~z,但不在d~f范围之间
11.String regex = "..." "."表示单个字符匹配任意一个字符值
12.String regex = "\\." "\\."表示转义为普通字符"." ;
该转移之后普通字符"." 不再具有 匹配任意一个字符值的作用
12.String regex = "\\s" "\s"表示单个字符匹配空白字符
String regex = "\\S" "\S"表示单个字符不能匹配空白字符;"\S" 等同于 "^\s";
13. String regex = "\\w" "\w"表示单个字符匹配a~z 或 A~Z或 0~9;"\w" 等同于 [a-zA-Z0-9]
String regex = "\\W" "\W"表示单个字符不能匹配a~z 或 A~Z或 0~9;"\W" 等同于"^\w"
14.String regex = "A?" 表示该字符A 必须出现 0次 或 1次
15.String regex = "A*" 表示该字符A 必须出现 0次 或 多次
16String regex = "A+" 表示该字符A 必须出现 1次 或 多次
2.group分组:
1.String regex = "((A)(B(C)))":第一个分组是整体((A)(B(C))),第二个分组是(A),第三个分组是(B(C)),第四个分组是(C)
String regex = "(A)\\1":\1 表示 引用(代表)第一个分组(A)
例子:
//(.)\\1+:\1 表示 引用的第一个分组(.)匹配出来的数据 可以是 一个或多个,即 (.)\\1+ 相当于 "我+"
String regex = "(.)\\1+"
String str = "我我我"
boolean b = str.matches(regex)//true
------------------------------------------------------String str = "我我我爱爱爱渚渚渚"
// "(.)\\1+":"\1" 表示 引用的第一个分组"(.)" 匹配出来的数据,即 "(.)\\1" 匹配出 "我" ,"(.)\\1+" 匹配出 叠词 "我+"。
// 因为后面执行 replaceAll 所以会进行 多次匹配,所以最终"(.)\\1+" 会进行多次匹配,得出 叠词 "我+"、"爱+"、"渚+"。
String regex = "(.)\\1+"// replaceAll(regex, "1"引用的第一个分组的数据。
// "1"):表示把 "(.)\\1+"替换为 "1"和 "\1" 都匹配出 "我"、"爱"、"渚"
String newStr = str.replaceAll(regex, "$1") //newStr 为 "我爱渚"
3.Pattern正则表达式对象:
1.Pattern p = Pattern.compile(正则表达式字符串):把 正则表达式字符串 封装为 Pattern正则表达式对象p
2.Matcher m = p.matcher(String str“需要进行匹配的”字符串):
Pattern正则表达式对象调用matcher方法 去匹配 “需要进行匹配的”字符串,返回匹配正确出来的结果m;
"Matcher m" 可以包含匹配出来的一个或多个数据;
3.m.find():判断 匹配出来的结果数据"Matcher m" 是否为空
4.String str = m.group():
每次只从匹配出来的结果数据"Matcher m"中 取出一个数据,而"Matcher m" 可以包含匹配出来的一个或多个匹配到的数据,
所以需要循环执行 while(m.find()) 每次都判断结果数据"Matcher m"中是否还存在数据,如返回true,
说明剩余有数据可取出,然后执行 String str = m.group() 取出 结果数据"Matcher m"中的 一个数据,继续循环判断。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?