日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java正则表达式爬虫_Java简单爬虫系列(3)---正则表达式和Java正则API的使用

發(fā)布時(shí)間:2024/7/19 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java正则表达式爬虫_Java简单爬虫系列(3)---正则表达式和Java正则API的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一篇內(nèi)容寫了如何請(qǐng)求資源,那么資源請(qǐng)求下載之后我們就要對(duì)它就行解析了,解析之前我們先熟悉一下正則表達(dá)式

正則表達(dá)式在平常使用時(shí)還是很廣泛的,比如說表單輸入驗(yàn)證,驗(yàn)證手機(jī)號(hào)郵箱之類,Java的字符串匹配實(shí)現(xiàn)等都用到了正則,正則表達(dá)式的規(guī)則也不是很多,我簡(jiǎn)單寫幾種,如果你想詳細(xì)的了解學(xué)習(xí)正則表達(dá)式,推薦閱讀正則表達(dá)式30分鐘入門教程,寫的很全面,講解的也很到位。

我要寫的是使用過程

下面是一些常用的

元字符

\b 用于單詞的間隙處,\bhello\b表示匹配hello單詞

\d 匹配數(shù)字 0\d\d 表示匹配011,023,以0開頭三位數(shù)字,還可以寫成0\d{2},0后面兩個(gè)數(shù)字

. ?匹配換行符以外的所有字符

* 它前面的字符可以無限重復(fù)

\s 任意的空白符 ,比如空格,TAB

\w?字母或數(shù)字或下劃線或漢字等

+ 和*類似,但是+至少一次,*可能0此

^ 字符串開始

$ 字符串結(jié)束

{5,12} 長(zhǎng)度限制在5到12之間

? 重復(fù)0到1次

[ ] 表示需要查找的內(nèi)容,比如[aeiou]包含元音字母,[.?*]包含.?*的串

字符轉(zhuǎn)義

用 \ 來轉(zhuǎn)義元字符,比如要查找含*的串,\* == *

分支條件

| 表示或,兩個(gè)表達(dá)式連接?a|b,表示滿足表達(dá)式a或者b

分組

()分組,可以把多個(gè)匹配放到一塊,重復(fù)查找

反義

\W\S\D\B把小寫改成大寫,[]里的加^,比如[^aeiou]不是元音字母

注釋

(?#comment) 對(duì)表達(dá)式進(jìn)行注釋,比如 2\d[0-2](?#200-292) ? 表示200-292之間的數(shù)字

貪婪與懶惰

a.*b,它將會(huì)匹配最長(zhǎng)的以a開始,以b結(jié)束的字符串。如果用它來搜索aabab的話,它會(huì)匹配整個(gè)字符串a(chǎn)abab。這被稱為貪婪匹配。

在 . * ? {n,m}等后面加?則表示盡可能少的匹配,.? *? ?? {n,m}?

可能你看了上面還是不知道在說什么不要緊,下面寫了java的正則API之后會(huì)舉例說明

java.util.regex 包主要由三個(gè)類所組成:Pattern、Matcher 和 PatternSyntaxException。

Pattern 對(duì)象表示一個(gè)已編譯的正則表達(dá)式。Pattern 類沒有提供公共的構(gòu)造方法。要構(gòu)建一個(gè)模式,首先必須調(diào)用公共的靜態(tài) compile 方法,它將返回一個(gè) Pattern 對(duì)象。這個(gè)方法接受正則表達(dá)式作為第一個(gè)參數(shù)。

Matcher 是一個(gè)靠著輸入的字符串來解析這個(gè)模式和完成匹配操作的對(duì)象。與 Pattern 相似,Matcher 也沒有定義公共的構(gòu)造方法,需要通過調(diào)用 Pattern 對(duì)象的 matcher 方法來獲得一個(gè) Matcher 對(duì)象。

PatternSyntaxException 對(duì)象是一個(gè)未檢查異常,指示了正則表達(dá)式中的一個(gè)語(yǔ)法錯(cuò)誤。

使用的流程可以分為下面幾個(gè)步驟

Pattern的compile靜態(tài)方法獲取pattern對(duì)象

pattern調(diào)用自身的matcher方法返回Matcher對(duì)象matcher

matcher對(duì)象通過find,matches,lookingAt等方法進(jìn)行匹配

下面是個(gè)示例,要找到匹配ae,be,de,he之中的任意一個(gè)

package?com.hldh.river.regex;

import?java.util.regex.Matcher;

import?java.util.regex.Pattern;

/**

*?Created?by?liuhj?on?2016/1/5.

*?本例用于測(cè)試JDK1.7?中的Matcher和Pattern

*

*?使用時(shí)主要是Pattern編譯正則,Matcher用來匹配字符串

*/

public?class?AppTest?{

public?static?void?main(String?args[]){

String?regexStr?=?"[abdh]e";

String?targetStr?=?"hello?world";

//獲取Pattern對(duì)象

Pattern?pattern?=?Pattern.compile(regexStr);

//?定義一個(gè)matcher用來做匹配

Matcher?matcher?=?pattern.matcher(targetStr);

if?(matcher.find())?{

System.out.println(matcher.group());

}

}

}

輸出結(jié)果

he

是不是很簡(jiǎn)單,主要的難點(diǎn)還是在正則表達(dá)式的掌握上,API很好理解

還有一個(gè)點(diǎn)我覺得需要說明一下,就是group,正則表達(dá)式里有個(gè)分組的概念,比如說“^([abdh]e)(\d+)$”這里面就是兩個(gè)分組,對(duì)應(yīng)API里的group(int group),參數(shù)里是2的話就對(duì)應(yīng)匹配(\d+),參數(shù)是1的話對(duì)應(yīng)匹配([abdh]e),參數(shù)0是系統(tǒng)默認(rèn),表示匹配整個(gè)串。

使用group就可以把匹配到的字符竄捕獲。

Matcher中find方法是匹配字符串中的一部分,matches匹配整個(gè)字符串,所以啊你看表單驗(yàn)證都是用的matches方法。

總結(jié)

以上是生活随笔為你收集整理的java正则表达式爬虫_Java简单爬虫系列(3)---正则表达式和Java正则API的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。