4月2号.
正则表达式的作用:
作用一:
示例:
[1-9]表示0不在开头,\\d表示数字,{5,19}表示位数.
拓展:
正则表达式:
System.out.println("a".matches(regex:"[a-z&[def]]")); //true
System.out.println("&".matches(regex:"[a-z&[def]]")); //true
细节:如果要求两个范围的交集,那么需要写符号&& , 如果写成了一个&,那么此时&表示就不是交集了,而是一个简简单单的&符号.
作用二:
爬虫:
String str="Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,"+
"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
//1.获取正则表达式的对象
Pattern p = Pattern.compile("JavalId{0,2}");
//2.获取文本匹配器的对象
//拿着m去读取str,找符合p规则的子串
Matcher m = p.matcher(str);
//3.利用循环获取
while(m.find())(
String s = m.group();
System.out.println(s);
}
示例:
Strings="java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和JAva11,"+
"因为这两个是长期支持版本,下一个长期支持版本是JAVa17,相信在未来不久JAVA17也会逐渐登上历史舞台";
//1.定义正则表达式
//?理解为前面的数据Java
//=表示在Java后面要跟随的数据
//但是在获取的时候,只获取前半部分
//需求1:
String regex1 = "((?i)Java)(?=8|11|17)";
//需求2:
String regex2 = "((?i)Java)(8|11|17)";
String regex3 = "((?i)Java)(?:8|11|17)";
//需求3:
String regex4 = "((?i)Java)(?!8|11|17)";
Pattern p = Pattern.compile(regex4);
Matcher m = p.matcher(s);
while(m.find()){
System.out.println(m.group());
}
贪婪爬取与非贪婪爬取:
正则表达式在字符串方法中的使用:
分组:
捕获分组:
示例:
//需求:把重复的内容替换为单个的
//学学 学
//编编编编 编
//程程程程程程 程
//(.)表示把重复内容的第一个字符看做一组
// \\1 表示第一字符再次出现
// + 至少一次
// $1 表示把正则表达式中第一组的内容,再拿出来用
String result = str.replaceAll(regex:"(.)\\1+",replacement:"$1");
System.out.println(result);
非捕获分组: