目录

一.正则表达式的使用二.正则表达式语法转义字符 /捕获分组

三.正则表达式作用1.校验字符串是否满足规则2.在文本中过滤需要内容

四.正则表达式在字符串中的使用

正则表达式,学一次忘一次,这回必须给她做点标记,避免过几天她又不是我的东西了

前言:个人水平有限,可能并没有解释到您想要的程度,所以不足之处欢迎您的补充,愿我们一起进步,最后感谢您的阅览

一.正则表达式的使用

先上案例,有例子场景更清晰

对,用起来就是这么爽,想一想不用正则,你用if判断和for循环来做,会写多少行判断代码?

二.正则表达式语法

正则表达式中的中括号,[ ]是表示一个范围,在其范围之内为true,不在其范围中为false

总结 ① ^为取反,去掉的意思 ② - 代表是从… 到… 这个范围 ③ &&是取两个范围的交集,单写一个&没有任何含义,就只是一个&字符 ④(?i)abc 匹配时忽略abc的大小写

使用方式 str.matches("正则匹配内容") str是一个要匹配的字符串,如果str在正则匹配范围中,就返回true,否则返回false

演示一个容易出错的,多注意,正则表达式是从左到右一个一个的去匹配的

"ab".matches("[abc]") //结果为false

"ab".matches("[abc][abc]") //结果为true

第一个a会跟第一个[abc]判断,第二个b会跟第二个[abc]判断

如果不想像上面那样一个字符一个字符匹配,就使用下面的数量词

使用实例如下

写正则表达式心得:拿着一个正确数据,从左到右,依次去写

转义字符 /

这里多提一嘴转义字符

这就是为什么正则匹配使用时会用 \ \d来表示一个数字,避免 \d 给转义了, 再加个\ ,让它变成普通的\字符

捕获分组

使用如下,下面是两个比较经典的需求,几个例子可能不太容易看懂,但认真看几遍就会很清晰

匹配开头和结束字符是否相同

判断开始部分和结束部分是否一致,部分内部字符也要相同

去掉重复字符

总结

不占用组号的意思就是,组号规则是从第一个左括号开,依次为第一组,第二组,而对于这种非捕获分组,它的左括号不算在组号规则内

三.正则表达式作用

1.校验字符串是否满足规则

可以用来匹配输入的是否满足定义的要求,常见的有输入手机号和验证码匹配 下面实例展示

验证手机号

验证邮箱

这里推荐一个idea的插件,AnyRule,根据范例改改就能用,比如下面

2.在文本中过滤需要内容

这个就相当于爬虫,从一段文本中过滤获取指定内容信息 m 文本匹配器对象 str 大串 p 匹配规则 m要再str中找到符合p规则的小串

拿着文本匹配器从头开始读取,寻找是否有满足规则的子串 如果没有,返回false;如果有,则返回true,其底层记录子串的起始索引和结束索引+1 find方法底层会根据find方法记录的索引进行字符串的截取。subString(起始索引,结束索引);包头不包尾 如(0,4)但是不包含4索引 会把截取的小串进行返回

public static void main(String[] args) {

String str = "东风夜放花千树,更吹落、星如雨。宝马雕车香满路。凤箫声动,玉壶光转,一夜鱼龙舞。" +

"蛾儿雪柳黄金缕,笑语盈盈暗香去。众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。";

//获取正则表达式对象

Pattern p = Pattern.compile("千\\w{0,1}");

//获取文本匹配器对象

Matcher m = p.matcher(str);

//利用循环获取

while(m.find()){

String s = m.group();

System.out.println(s);

}

}

带条件爬取 注:这里的?:没有特殊含义,regex3和regex2是一样的,:只是代表前面的所有数据,非要理解的话,就是这种 java:8这种类型。这个?:也可以不写,(毕竟写不写没区别)但是AnyRule插件上是这么用的,不理解的话,用插件可能一脸懵。

贪婪爬取和非贪婪爬取

如下,ab+为贪婪爬取,ab+?为非贪婪爬取

四.正则表达式在字符串中的使用

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。