正则表达式 是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。
Pattern:正则表达式对象(匹配类型)
Matcher:匹配器(按照Pattern模式进行匹配)
//regexp为待匹配正则表达式类型
//sts为待匹配的字符串
1.输出sts中匹配到regstring类型的字符串
Pattern pat = Pattern.compile(regexp);
Matcher mat = pattern.matcher(sts)
while(mat.find()){//进行匹配
System.out.println(mat.group(n)); //n
}
2.判断待匹配的字符串sts是否为regstring类型
boolean f = Pattern.matches(regexp,sts);
二、正则表达式核心方法1.matcher.find():是一个Boolean类型的方法,在sts字符串中匹配到就返回一个true,未匹配到就返回false
2.matcher.group(int n):matcher中有一个groups[]数组
1)group(0):return sts.substring(groups[0] ,groups[1])//截取groups[0]~groups[1]之间的字符(groups[1]索引位置不取)
……group(1),group(2)……以此类推;
group(n):return sts.substring(groups[n*2] ,groups[n*2+1])
//n=0,输出匹配字符串;0
groups[1]:最后一个字符的索引位置加一, 同时会记录oldLast的值, oldLast=groups(1),用来标记已经匹配到的位置,第二次匹配从oldLast开始,
3)groups[2]:第一个分组匹配的开始索引位置
groups[3]:第二个分组匹配的结束索引位置加一
4)……同理,第三组开始索引位置,结束索引位置,第四组……以此类推
1.\d表示任意一个数字
1)\d\d\d\d 表示连续四个数字的模式
2)(\d\d)(\d\d) 第一给()代表一号分组;第二个()代表二号分组
(下面讲的字符没特殊指定,既可以是单个字符也可以是字符串)
1.限定符(Java中限定符的使用都是默认为贪婪匹配的)
1)*:指定字符可以重复0到n次 eg:123* \12必须有,12后面的3可以是任意个(指定字符是指距离它最近的字符,有括号就是括号里面的字符)2)+:指定字符可以重复1到n次 eg:s+ \ 匹配至少一个空格字符
3)?:指定字符可以重复0到1次 \?指定的字符可要可不要
4){n}:指定字符重复n次 eg: [0-9]{11} \匹配的字符是以0到9之间(包含0和9) 的数组成的长度为11的字符串
5){n,} :指定字符至少有n个 eg:[0-9]{2,} \匹配的字符是以0到9之间的数组成,长度至少是2
6){k,n}:指定字符至少有k个,最多不超过n个 eg:[0-9]{3,4} \匹配的字符可以是:000,1234……当strs只有1234时,Java中默认贪婪匹配(尽可能匹配的更多),只输出1234
2.选择匹配符
1)|:选择匹配符 eg:王者荣耀|王者农药 \匹配的内容中只要有”王者荣“或 者”王者农药 “都会匹配成功
3.分组组合和反向引用符
4.特殊字符
*转义号:\(java中是两个\代表转义号)
当我们使用正则表达式去匹配一些特殊字符('.','*','+','(',')','','/','?','[',']','^','{','}')时,需要用到转义号,否则匹配不到结果,甚至会报错
其他的可以不用转义号 eg:regstring = " "等价于regstring = "\s"
5.字符匹配符
1)[]:可接收的字符列表 eg:[abcd] \可以接收a 、b、c、d中的任 意 一个字符
2)[^]:不接收的字符列表 eg:[^abbcd] \除了a、b、c、d四个字符其他 的字符都可以
3)-:连字符(数字范围是0-9) eg:a-z \可以是a到z之间(包括a和z) 的任意字符?大小排序有要求吗?
4).:匹配除‘n’外的任意单个字符 eg:a..b \以a开始以b结束,中间可以是 除‘n’外的任意两个字符
5)\d:匹配当数字字符(相当于[0-9]) eg:\d{3}(\d)? \包含三个或四个数字字符
6)\D:匹配单个非数字字符(相当于[^0-9]) eg:\D(\d)* \以单个非数字字符开始,后接 任意个数字字符
7)\w:匹配单个数字、大小写字母(相当于[0-9a-zA-Z])
8)\W:与7)相反,相当于相当于[^0-9a-zA-Z] eg:\W+\d{3} \以至少一个非数字、字母字符 开始,三个数字字符结尾的字串
9)\s:匹配空格符(tab也算空格,它的空格数是可以在相应的编译软件中设置的,idea中一般默认一个table("t")等于四个空格("s"))
10)\S:匹配非空格字符
*让正则表达式匹配不区分大小写:
1*) ((?i)abc)括号内的符号abc不区分大小写
2*) Pattern pattern = Pattern.compile(string,Pattern.CASE_INSENSITIVE)//待匹配字符中所有的字符不区分大小写
6.定位符
1)^:指定起始字符 eg:^[0-9]+[a-z]* \以至少一个数字开始,后面接任意个小写字母
2)$:指定结束字符 eg:^[0-9]\-[a-z]$ \以至少一个数字开始,接一个”-”,并以任意小写字母 结束(结束相对整串字符sts而言)
3)\b:匹配目标字符串的边界 eg:han\b \sts="hanshunping"匹配不成功;sts="shunpinghan"匹配成功;sts="han shunping"匹配成功,在sts中的最后或空格算边界
4)\B:匹配目标字符串的非边界 eg:han\B 结果与3)相反



