API
Java帮我们写好的各种功能的Java类。这些Java类统称为API。正则表达式就是API帮我们写好的类。
正则表达式
例子:
字符类:[abc]:只能是a,b或c
[^abc]:除了a,b,c之外的任何字符
[a-zA-Z]:满足a-z以及A-Z这两个区间中的任意一个都可以
[a-d[m-p]]:a到d或者m到p
[a-z&&[def]]:a到z和def的交集。
[a-z&&[^bc]]:a到z和非bc的交集
[a-z&&[^m-p]]:a到z和非m到p的交集
预定义字符(只能匹配一个字符):. 任何的一个字符
\d 一个数字:[0-9]
\D 非数字:[^0-9]
\s 一个空白字符:[\t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w [a-zA-Z_0-9]英文、数字、下划线
\W [^\w]一个非单词字符
(?i) 忽略大小写
注意:\是转义字符,所以在java中,两个\(\\)表示一个\。(借鉴如上的例子)
数量词:X? X,一次或0次
X* X,零次或多次
X+ X,一次或多次
X{n} X,正好n次
X{n,} X,至少n次
X{n,m} X,至少n次但不超过m次
爬虫
本地爬虫
网络爬虫
URL后面的网址,是你想要爬取的网址。
有条件的爬取
贪婪爬取与非贪婪爬取
如果我们在用数量词获取数据时,它表示的次数不精确,那么我们到底获取的是多少次呢?这就涉及到了贪婪爬取与非贪婪爬取。
贪婪爬取:在爬取数据时尽可能多的获取数据。(java默认)
非贪婪爬取:在爬取数据时尽可能少的获取数据。
Java中,默认的是贪婪爬取;如果我们在数量词+ *的后面加上问号,那么此时就是非贪婪爬取
正则表达式在字符串方法中的使用
这里说几个常用的,因为有很多,大家可以在API文档中查阅。
public String[] matches(String regex):判断字符串是否满足正则表达式的规则
public String replaceAll(String regex,String newStr):按照正则表达式的规则进行替换。
public String[] split(String regex):按照正则表达式的规则切割字符串。
分组
每组是有组号的,也就是序号。
规则1:从1开始,连续不间断。
规则2:以左括号为基准,最左边的是第一组,其次为第二组,以此类推。
捕获分组
正则内部使用:\\组号
正则外部使用:$组号
非捕获分组
(?:正则):获取所有
(?=正则):获取前面部分
(?!正则):获取不是指定内容的前面部分
注意:这里的括号不占用分组。
如果String regex = "[1-9](?:\\d)\\1";这里后面的\\1会报错,因为他不知道哪里是第一组,这个表达式没有分组。