JAVA正则表达式

基本格式

  1. 创建正则对象(正则表达式对象)
  2. 创建匹配器()
  • \\d 代表 0-9的数字
        String regStr = "\\d"; 
		//正则表达式
        Pattern pattern = Pattern.compile(regStr);
	    //创建模式对象(正则表达式对象)
		Matcher matcher = pattern.matcher(content);
		//创建匹配器matcher 按照正则表达式的规则去匹配 content字符串
        while(matcher.find())
        {
            System.out.println(matcher.group(0));
        }

matcher.find()完成的任务

  1. 根据设定的字符串,定位满足规则的字符串(比如1998)
  2. 找到后将 字字符串的 开始索引记录 到matcher对象中 的属性 int[] group数组(数组初始化是-1)中
  3. groups[0] 存放着满足规则字符串的起始值,groups[1] 存放着满足规则字符串的结尾值+1
  4. 记录oldlast值 将子字符串的结束的索引+1 下一次开始find匹配从这里开始

matcher.group(0)完成的任务

当执行时

  1. 根据 groups[0] - groups[1] 记录的位置,从content开始截取字符串返回
  2. 返回[0,4) substring截取是左闭右开区间 包含0 但不包含索引为4的值

group(i)方法中

i代表的是当前这一次正则结果,分组i的值,某个正则中,0代表整个正则结果,j一个括号为一组,

若传入的0 则输出的是整个字符串 起始(i * 2) 结束(i * 2 + 1) 得到是0和1(第一组)

若传入的是1则输出的是第2组字符串 还是上面的运算方法得到的是 2 和3 2 — 4和5

++因为要存两个值(头/尾+1)所以需要乘以2++

如果再次指向find方法,将会重新查找字符串 起始值groups[0]=下一次字符串开始索引位置 ,group[1]=下一次字符串结束的索引位置,一切的一切又是一样,只不过是覆盖了groups的下标0和1的空间

分组

正则表达式中出现括号则算一组,第二个括号则算第二组

"(\\d\\d)(\\d\\d)"该字符串有两组,通过括号切割划分

重点在下面

比如字符串是1234

find查找整个的字符串,起始和终止存放在groups[0] = 0 至 groups[1] = 4为整个字符串的起始和终止

接下来查找第1组的字符串,存放在groups[2]-groups[3] 0,2 (取不到2)

接下来查找第2组的字符串,存放在groups[3]-groups[4] 2,4(取不到4)

若想要的group超出则报错误

正则表达式语法

必须了解元字符功能,元字符大致分为
限定符 选择匹配符 分组组合和反向引用符 特殊字符 字符匹配符 定位符

元字符-转义符号 \\

Java 正则中 \\代表其他语言的一个\

若需要检索 特殊字符 需要在特殊字符前添加转义符号
java的正则表达式中,用两个反斜杠来代表转义符号,其他语言一般是一个反斜杠
特殊字符有 . * + () $ / \ ? [] ^ { }
比如说.单独出现在正则表达式中意思是匹配所有字符(除了\n)
若使用\\.则查找的是 点 本身

元字符-字符匹配符

1

[ABC]匹配的是A、B、C中的任意字符
[^ABC]匹配的是 除了A、B、C中其他任意字符
[A-Z]匹配的是 所有大写的字符
在这里插入图片描述

.匹配所有字符 (除了\n) A...B匹配是 A*&(B
\\d 匹配单个 数字字符,相当于[0-9]
\\d\\d\\d等价于\\d{3}
\\D匹配的是 单个非数字字符 相当于[^0-9]
\\w匹配单个 数字 大写小写字母(下划线) 字符
\\W匹配 单个 数字 大写小写字母(下划线) 字符
\\s所有空白的字符 空格 制表符
\\S所有++非++空白的字符 空格 制表符

不区分大小写的方法
(?i)abc abc无论大小写都能匹配
a(?i)bc a一定小写 bc无论大小写都能匹配
a((?i)b)c 只有b不区分大小写
Pattern pattern = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE);

选择匹配符

ab|黄 可以查找字符串中包含ab 和 黄

匹配限定符

细节,作用在前面最近的一个
在这里插入图片描述
在这里插入图片描述
java匹配默认贪婪匹配,尽量匹配多的

定位符

在这里插入图片描述
起始字符,代表整个字符串的起始字符,若起始字符不符合则为空($结束同理)
边界字符 空格处 结束处,为指定字符串

分组

在这里插入图片描述
下面是举例非命名分组,group的1/2就是两组各自的内容
在这里插入图片描述
命名分组,可设置组名
在这里插入图片描述

非捕获分组 特别分组

在这里插入图片描述

第一个是组装,将常量和变量组装匹配
在这里插入图片描述

第二个 匹配常量 但是需要后面条件成立的常量
第三个,与第二个相斥

非贪婪匹配

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

整体匹配matches 在这里插入图片描述

Matcher类 常用方法

在这里插入图片描述
在这里插入图片描述

分组 捕获 反向引用

在这里插入图片描述
2. 捕获 看左括号起始,由此可判断出括号的顺序
3. 反向引用
用法 引用已经存在的分组 格式/内容 可以写出相同内容出现在不同的位置

比如说: 匹配五个连续的相同数字
‘(\d)\1{4}’ 在第一个分组的后面\1{4}代表内部引用第一组的值并且有四位

在这里插入图片描述
在这里插入图片描述
外部反向引用是使用美元符号 + 分组号 所以在replaceAll中使用 外部反向引用

在这里插入图片描述

String类本身就支持正则表达式

在这里插入图片描述
在这里插入图片描述

字符串的marches判断功能
是整体匹配!!!!!整个字符串必须符合正则的开头结尾在这里插入图片描述
split分割也支持正则
在这里插入图片描述

正则练习题

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值