Java学习笔记Day14
爬虫
- Pattern:表示正则表达式
- Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。子啊大串中去找符合匹配规则的子串。
// 1.获取正则表达式的对象
Pattern p = Pattern.compile("Java\\d{0,2}");// 2.获取文本匹配器的对象 拿着m去读取str,找符合规律的子串
Matcher m = p.matcher(str);// 3.利用循环获取
while(m.find()){String s = m.group();System.out.println(s);
}
- 贪婪爬取:在爬取数据的时候尽可能多的获取数据
- 非贪婪爬取:在爬取数据的时候尽可能少的获取数据
- Java中默认的就是贪婪爬取,如果我们在数量词+ * 的后面加上 问号,那么此时就是非贪婪爬取
String s = "abbbbbbbbbbbbbbbcc";
String regex = "ab+";// 贪婪
String regex = "ab+?";// 非贪婪Patern p = Patern.compile(regex);
Matcher m = p.matcher(s);while(m.find()){System.out.println(m.group())
}
正则表达式在字符串方法中的使用
方法名 | 说明 |
---|---|
public String[] matches(String regex) | 判断字符串是否满足正则表达式的规则 |
public String replaceAll(String regex,String newStr) | 按照正则表达式的规则进行替换 |
public String[] split(String regex) | 按照正则表达式的规则切割字符串 |
- replaceALL细节
- 方法在底层跟之前一样也会创建文本解析器的对象
- 从头开始去读字符串中的内容,只要有满足的,那么就用第二个参数去替换。
分组
每组是有组号的,也就是序号
- 规则一:从1开始,连续不间断
- 规则二:以左括号为基准,最左边的是第一组,其次是第二组,以此类推
捕获分组练习
-
需求一:判断一个字符串的开始字符和结束字符是否一致?只考虑一个字符
-
举例:a123a b456b c789c
-
// \\组号:表示把第x组的内容再出来用一次 String regex1 = "(.).+\\1";
-
-
需求二:判断一个字符串的开始部分和结束部分是否一致?可以有多个字符
-
举例:abc123abc b456b 123789123
-
String regex2 = "(.+).+\\1"
-
-
需求三:判断一个字符串的开始部分和结束部分是否一致?开始部分内部每个字符也需要一致
-
举例:aaa123aaa bbb456bbb 111789111
-
// (.):把首字母看作一组 // \\2:把首字母拿出来再次使用 // * :作用于\\2表示后面重复的内容出现0次或者多次 String regex3 = "((.)\\2*).+\\1";
-
捕获分组和非捕获分组
-
捕获分组
- 后续还要继续使用本组的数据
- 正则内部使用: \\组号
- 正则外部使用: $组号
-
非捕获分组
-
分组之后不需要再用本组数据,仅仅是把数据括起来
符号 含义 举例 (? : 正则) 获取所有 Java(?:8|11|17) (? = 正则) 获取前面部分 Java(? = 8|11|17) (? ! 正则) 获取不是指定内容的前面部分 Java(? ! 8|11|17)
-