資源描述:
《正則表達(dá)式基礎(chǔ)及Java正則表達(dá)式應(yīng)用》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、正則表達(dá)式基礎(chǔ)及Java正則表達(dá)式應(yīng)用陳敏剛2016.7.15【引言】由于研究需要對日志信息、視頻信息作大數(shù)據(jù)的分析,特整理以下正則表達(dá)式的各種用法,比如如何提取Apache日志信息中的IP地址和訪問時(shí)間,如何設(shè)計(jì)簡單的網(wǎng)絡(luò)爬蟲程序等,主要通過Java語言描述,其它語言如Python思路也基本相通。1.正則表達(dá)式基本概念正則表達(dá)式,也叫RegularExpressions,它實(shí)際上是用來搜索、匹配字符串的模式,是一種強(qiáng)大而靈活的文本處理工具。在Java中要使用正則表達(dá)式,則需要importjava.util.rege
2、x,一般與JavaI/O聯(lián)合使用正則表達(dá)式一般要表達(dá)三個(gè)要素。(1)要匹配的字符,如[0-9];(2)字符的數(shù)量或者有幾個(gè)這樣的字符,如{2,4},即2-4個(gè)字符,需要用大括號括起來。(3)字符的位置在哪兒?如b表示字符的邊界,border。要熟悉以上正則表達(dá)式的基本元素,可以對應(yīng)于正則表達(dá)式的要素,分為字符類、數(shù)量類和位置類。(1).代表1個(gè)字符的通配符比如,t.n可匹配“tan,ten,ton,tpn”等(2)[]代表字符集,只有方括號里指定的字符才能參與匹配,方括號內(nèi)只能匹配單個(gè)字符,但可用連字符-來表示范圍
3、,如[0-9]表示0-9中的一個(gè)數(shù)字;比如,t[aeiou]n,可匹配“tan,ten,ton”,但不匹配tpn、toon等。[^]表示排斥性字符集。比如,[^x][a-z]+,可匹配除x開頭的所有單詞。(3)()用來分組,在()內(nèi)可以使用“
4、”操作表示“或”,方括號[]不能用“
5、”比如,t(a
6、e
7、i
8、o
9、u
10、oo)可匹配“tan,ten,ton”,還可匹配toon。(4)^表示起始位置、b表示單詞邊界(a)^的基本用法ü第一個(gè)例子的匹配是成功的,這是因?yàn)槟J秸紦?jù)了整個(gè)輸入的字符串。ü第二個(gè)例子失敗了,是由于輸入
11、的字符串在開始部分包含了額外的空格。ü第三個(gè)例子指定的表達(dá)式是不限的空格,后跟著在行尾的dog。ü第四個(gè)例子,需要dog放在行首,后面跟的是不限數(shù)量的單詞字符。(b)對于檢查一個(gè)單詞開始和結(jié)束的邊界模式(用于長字符串里子字符串),這時(shí)可以在兩邊使用b,例如bdogb。(c)對于匹配非單詞邊界的表達(dá)式,可以使用B來代替:(d)對于需要匹配僅出現(xiàn)在前一個(gè)匹配的結(jié)尾,可以使用G:星號*表示0個(gè)或多個(gè)加號+表示1或多個(gè)問號?表示0個(gè)或1個(gè)n就是寫個(gè)數(shù)字表示重復(fù)多少次[0-9]+來查找年份,字符為數(shù)字,數(shù)字出現(xiàn)1個(gè)或
12、多個(gè)。由于正則表達(dá)式比較難用,所以引入一些簡寫方式,比如d表示數(shù)字(digit)[0-9],s表示空白符(space)、w表示單詞字符(word)[a-zA-Z_0-9]。正則表達(dá)式寫起來還是比較麻煩,因此經(jīng)常需要利用工具,比如QRe,b(href)=(‘[^’]+’)上面正則表達(dá)式的解釋:(1)兩個(gè)圓括號()代表兩個(gè)group(2)b表示單詞邊界,(href)表示group1(3)(‘[^’]+’)表示group2,字符是‘開始,’結(jié)束,中間1個(gè)或多個(gè)非’字符,整個(gè)匹配字符串的稱為group01.正則表達(dá)
13、式的基本應(yīng)用Java中正則表達(dá)式,需要用到j(luò)ava.util.regex包,這個(gè)包主要有兩個(gè)類,分別是Pattern類(模式類)和Matcher類(匹配類)。nPattern對象表示一個(gè)已編譯的正則表達(dá)式。Pattern類沒有提供公共的構(gòu)造方法。要構(gòu)建一個(gè)模式,首先必須調(diào)用公共的靜態(tài)compile方法,它將返回一個(gè)Pattern對象,這個(gè)方法接受正則表達(dá)式作為第一個(gè)參數(shù),把正則表達(dá)式字符串編譯到一個(gè)用于處理匹配的模式對象中。nMatcher是在輸入的字符串中定位模式的匹配的對象與Pattern相似,Matcher也沒
14、有定義公共的構(gòu)造方法,需要通過調(diào)用Pattern對象的matcher方法來獲得一個(gè)Matcher對象。2.1字符串的分割//將正則表達(dá)式”[,\s]+”編譯成模式類對象p,\s表示空格,并用了表示轉(zhuǎn)義符Patternp=Pattern.compile(“[,\s]+”);//調(diào)用p的split方法分割字符串String[]result=p.split("one,two,threefour,five");2.2字符串的匹配驗(yàn)證//開始的^表示字符串開始,結(jié)尾的$表示字符串結(jié)尾//@前表示1到多個(gè)非@字符//@后
15、“[\w]+”表示1到多個(gè)word,\w表示w的轉(zhuǎn)義//“(\.[\w]+)*”表示多個(gè)”.word”的模式Stringpattern="^[^@]+@[\w]+(\.[\w]+)*$";Stringemail="dstang2000@263.net";booleanok=Pattern.matches(pattern,emai