轻松学会正则表达式(标题狗)
正则表达式
概念
正则表达式是用来描述具有一定特征的字符串的特殊字
符串。Regular Expression。
ab*: a 若干个 b ->* 零个及以上 ,匹配: a ab
abbbbb abbbbbbb 不能 bbbbb。
(cd)*: ()->组,改变了优先级 ,若干个 cd,匹配: “” cd
cdcd cdcdcd
ab*(cd)*:a 若干个 b 和若干个 cd 匹配: a ab
abbbbb abbbbbbb acd acdcd abbbbbcd abcd
ab*|(cd)*: |或的优先级低 匹配: a ab cd
ab|c : 匹配 ab c
作用
验证、查找、替换、分割
匹配规则
1. 特殊字符转义
\d:0-9数字,使用时\要加一个\转义 \d
\w: 26字母大小写,0-9数字 \w
^ 开始标志
$ 结束标志
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V5THaOnX-1603278853829)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021172825206.png)]
2.自定义
由 [] 组,只匹配一个, 需要注意以下四个:
^ : 如果在第一个位置,表示取反的含义。
-:表示一个区间即范围
] : 最近一个位置为:结束 ,如果要表示普通的]请加 \
\ : 转义
[ae134] -> a e 1 3 4
[(as)] ->a s ( )
[a-z] ->小写字母
[-\]a-z\[] -> -[] 及小写字母
3.默认|标准字符类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7e9vdN5f-1603278853832)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021173546907.png)]
h[ea]llo –>hello hallo
h(e|a)llo ->hello hallo
[\-\\abc] -> - \ a b c
\d\s ->一个数字和一个空白
[\d\s] –> 数字 或 空白
3. 量词
匹配的过程中,需要指定次数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZzmzZYUp-1603278853834)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021185857923.png)]
co*ke –> 不限个数的 O
co+ke –>至少一个 O
co?ke ->1 个或零个 O
co{0}ke ->0 个
co{5,}ke –>5 次及以上
co{5,8}ke –> 至少 5 次,最多 8 次
[1-9]\d{3} –>大于等于 1000 小于等于 9999 的数
[1-9]\d{2,4} –>大于等于 100 小于等于 99999 的数
1[34578]\d{9} : 匹配手机号
<[a-zA-Z]+\d?> ->网页标签
<[A-Za-z][A-Za-z0-9]*> ->网页标签
4. 贪婪模式
在匹配次数不定时如 *, {n,}, + 匹配字符越多越好,
默认模式即”贪婪模 ”
-
贪婪模式 greedy(匹配字符越多越好,可回溯)
-
? 懒惰模式 lazy reluctant (匹配字符越少越好,可回
溯)
- + 独占模式 possessive(匹配字符越多越好,不可回溯)
用的较少 cokecolacoooooooooooooke
.*o –>贪婪模式
.{2,}o–>贪婪模式
.{2,}?o –>懒惰模式
.{2,}+o –>独占模式,不可回溯 没有匹配到内容。
<.+?> ->找出标签 不要标签内的内容。不是
<.+> <[^>]+>->找出标签 不要标签内的内容。不是<.+>
5.边界
1)、边界不占用宽度,只是一个界限
2)、 ^ :开始 \b :单词边界 \B :非单词边界
$ :结束
^ :多行代表每行头 单行代表整个字符串的开始
$ : 多行代表每行尾 单行代表字符串的结尾
\b : 匹配前面或后面的不是\w
\B : 匹配前面或后面的是\w
查找开头的 hello -> ^hello 找出 独立的单词 world -> \bworld\b 查找结尾的 world -> world$
常用类
java.util.regex Pattern Matcher String
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tm2VQRJQ-1603278853837)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021190732463.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESmYp9td-1603278853840)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021190805375.png)]
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author lwf
* @title: Demo1
* @projectName 10_21Code
* @description: TODO
* @date 2020/10/2116:03
*/
public class Demo1 {
public static void main(String[] args) {
String str1="127.124.235.001";
//简单匹配检查ip
System.out.println(str1.matches("\\d{1,3}(.\\d{1,3}){3}"));
//0-255 ([01]\\d{2})|2([0-4]\\d)|25[0-5] (([01]\d{2})|2([0-4]\d)|25[0-5])(.(([01]\d{2})|2([0-4]\d)|25[0-5])){3}
//只能匹配 0-255.0-255.0-255.0-255 且127.0.0.1必须写成127.000.000.001不然无法识别
System.out.println(str1.matches("(([01]\\d{2})|2([0-4]\\d)|25[0-5])(.(([01]\\d{2})|2([0-4]\\d)|25[0-5])){3}"));
//Pattern ,Matcher 匹配字符串
//Pattern 调用compile()方法传入正则表达式
//获取到的Pattern对象调用matcher()传入要分析的字符串
//调用get()方法获取是否匹配,参数表示从哪个索引开始查找默认0
String str2="江西上饶beautiful";
Pattern p=Pattern.compile("上");
Matcher matcher=p.matcher(str2);
System.out.println(matcher.find(2));
}
}
从哪个索引开始查找默认0
String str2=“江西上饶beautiful”;
Pattern p=Pattern.compile(“上”);
Matcher matcher=p.matcher(str2);
System.out.println(matcher.find(2));
}
}