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會報錯,因為他不知道哪里是第一組,這個表達式沒有分組。