




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、java.util.regex 是一個用正則表達式所訂制的模式來對字符串進行匹配工作的類庫包。1 .簡介:java.util.regex 是一個用正則表達式所訂制的模式來對字符串進行匹配工作的類庫包。它包括兩個類:PatternftMatcherPattern 一個 Pattern 是一個正則表達式經(jīng)編譯后的表現(xiàn)模式。Matcher 一個 Matcher 對象是一個狀態(tài)機器, 它依據(jù) Pattern 對象做為匹配模式對字符串展開匹配檢查。首先一個 Pattern 實例訂制了一個所用語法與 PERL 勺類似的正則表達式經(jīng)編譯后的模式, 然后一個 Matcher 實例在這個給定的 Pattern
2、實例的模式控制下進行字符串的匹配工作。以下我們就分別來看看這兩個類:2 .Pattern 類:Pattern 的方法如下:staticPatterncompile(Stringregex)將給定的正則表達式編譯并賦予給 Pattern 類staticPatterncompile(Stringregex,intflags)同上,但增加 flag 參數(shù)的指定,可選的 flag 參數(shù)包括:CASEINSENSITIVE,MULTILINE,DOTALL,UNICODE,CACANONEQintflags()返回當前 Pattern 的匹配 flag 參數(shù).Matchermatcher(CharSeq
3、uenceinput)生成一個給定命名的 Matcher 對象staticbooleanmatches(Stringregex,CharSequenceinput)編譯給定的正則表達式并且對輸入的字用以該正則表達式為模開展匹配,該方法適合于該正則表達式只會使用一次的情況,也就是只進行一次匹配工作,因為這種情況下并不需要生成一個 Matcher 實例。Stringpattern()返回該 Patter 對象所編譯的正則表達式。Stringsplit(CharSequenceinput)將目標字符串按照 Pattern 里所包含的正則表達式為模進行分割。Stringsplit(CharSequen
4、ceinput,intlimit)作用同上,增加參數(shù) limit 目的在于要指定分割的段數(shù),如將 limi 設(shè)為 2,那么目標字符串將根據(jù)正則表達式分為割為兩段。一個正則表達式,也就是一申有特定意義的字符,必須首先要編譯成為一個Pattern 類的實例,這個 Pattern 對象將會使用 matcher()方法來生成一個 Matcher實例,接著便可以使用該 Matcher 實例以編譯的正則表達式為基礎(chǔ)對目標字符用進行匹配工作,多個 Matcher 是可以共用一個 Pattern 對象的?,F(xiàn)在我們先來看一個簡單的例子,再通過分析它來了解怎樣生成一個 Pattern 對象并且編譯一個正則表達式,
5、最后根據(jù)這個正則表達式將目標字符串進行分割:復(fù)制代碼代碼如下:importjava.util.regex.*;publicclassReplacementpublicstaticvoidmain(Stringargs)throwsException/生成一個 Pattern,同時編譯一個正則表達式Patternp=Ppile(/+);用 Pattern 的 split()方法把字符串按/分割Stringresult=p.split(KevinhasseenLEONsevealtimes,becauseitisagoodfilm.+/凱文已經(jīng)看過這個殺手不太冷幾次了,因為它是一部+”好電影。/名
6、詞:凱文。);for(inti=0;isevealtimes,becauseitisagoodfilm.凱文已經(jīng)看過這個殺手不太冷幾次了,因為它是一部好電影。名詞:凱文。很明顯,該程序?qū)⒆址?”進行了分段,我們以下再使用 split(CharSequenceinput,intlimit)方法來指定分段的段數(shù),程序改動為:tringresult=p.split(KevinhasseenLEONsevealtimes,becauseitisagoodfilm./凱文已經(jīng)看過這個殺手不太冷幾次了,因為它是一部好電影。/名詞:凱文。,2);這里面的參數(shù)2表明將目標語句分為兩段。輸出結(jié)果則為:Kev
7、inhasseenLEONsevealtimes,becauseitisagoodfilm.凱文已經(jīng)看過這個殺手不太冷幾次了,因為它是一部好電影。/名詞:凱文。由上面的例子,我們可以比較出 java.util.regex 包在構(gòu)造 Pattern 對象以及編譯指定的正則表達式的實現(xiàn)手法與我們在上一篇中所介紹的 Jakarta-ORO 包在完成同樣工作時的差別, Jakarta-ORO 包要先構(gòu)造一個 PatternCompiler 類對象接著生成一個Pattern 對象,冉將正則表達式用該 PatternCompiler 類的 compile。方法來將所需的正則表達式編譯賦予 Pattern
8、類:PatternCompilerorocom=newPerl5Compiler();Patternpattern=pile(REGULAREXPRESSIONS);PatternMatchermatcher=newPerl5Matcher();但是在 java.util.regex 包里,我們僅需生成一個 Pattern 類,直接使用它的 compile()方法就可以達到同樣的效果:Patternp=Ppile(/+);因此似乎 java.util.regex 的構(gòu)造法比 Jakarta-ORC為簡潔并容易理解。3 .Matcher 類:Matcher 方法如下:MatcherappendR
9、eplacement(StringBuffersb,Stringreplacement)將當前匹配子用替換為指定字符用,并且將替換后的子用以及其之前到上次匹配子用之后的字符串段添加到一個 StringBuffer 對象里。StringBufferappendTail(StringBuffersb)將最后一次匹配工作后剩余的字符串添加到一個 StringBuffer 對象里。intend()返回當前匹配的子用的最后一個字符在原目標字符串中的索引位置。intend(intgroup)返回與匹配模式里指定的組相匹配的子用最后一個字符的位置。booleanfind()嘗試在目標字符串里查找下一個匹配子
10、用。booleanfind(intstart)重設(shè) Matcher 對象, 并且嘗試在目標字符串里從指定的位置開始查找下一個匹配的子用。Stringgroup()返回當前查找而獲得的與組匹配的所有子用內(nèi)容Stringgroup(intgroup)返回當前查找而獲得的與指定的組匹配的子用內(nèi)容intgroupCount()返回當前查找所獲得的匹配組的數(shù)量。booleanlookingAt()檢測目標字符串是否以匹配的子用起始。booleanmatches()嘗試對整個目標字符展開匹配檢測,也就是只有整個目標字符串完全匹配時才返回真值。Patternpattern()返回該 Matcher 對象的現(xiàn)
11、有匹配模式,也就是對應(yīng)的 Pattern 對象。StringreplaceAll(Stringreplacement)將目標字符串里與既有模式相匹配的子用全部替換為指定的字符申。StringreplaceFirst(Stringreplacement)將目標字符串里第一個與既有模式相匹配的子用替換為指定的字符串。Matcherreset()重設(shè)該 Matcher 對象。Matcherreset(CharSequenceinput)重設(shè)該 Matcher 對象并且指定一個新的目標字符串。intstart()返回當前查找所獲子用的開始字符在原目標字符串中的位置。intstart(intgroup)
12、返回當前查找所獲得的和指定組匹配的子用的第一個字符在原目標字符串中的位置。(光看方法的解釋是不是很不好理解?不要急,待會結(jié)合例子就比較容易明白了)一個 Matcher 實例是被用來對目標字符串進行基于既有模式(也就是一個給定的Pattern 所編譯的正則表達式)進彳 T 匹配查找的,所有往 Matcher 的輸入都是通過CharSequence 接口提供的,這樣做的目的在于可以支持對從多元化的數(shù)據(jù)源所提供的數(shù)據(jù)進行匹配工作。我們分別來看看各方法的使用:matches()/lookingAt()/find():一個 Matcher 對象是由一個 Pattern 對象調(diào)用其 matcher()方法
13、而生成的,一旦該Matcher 對象生成,它就可以進行三種不同的匹配查找操作:matches。方法嘗試對整個目標字符展開匹配檢測,也就是只有整個目標字符串完全匹配時才返回真值。lookingAt()方法將檢測目標字符串是否以匹配的子用起始。巾 nd()方法嘗試在目標字符串里查找下一個匹配子用。以上三個方法都將返回一個布爾值來表明成功與否。replaceAll()/appendReplacement()/appendTail()Matcher 類同時提供了四個將匹配子用替換成指定字符串的方法:replaceAll()replaceFirst()appendReplacement()appendT
14、ail()replaceAll()WreplaceFirst()的用法都比較簡單,請看上面方法的解釋。我們主要重點了解下 appendReplacement()ftappendTail()?!r 法。appendReplacement(StringBuffersb,Stringreplacement)將當前匹配子用替換為指定字符串,并且將替換后的子用以及其之前到上次匹配子串之后的字符串段添加至 U 一個StringBuffer 對象里,而 appendTail(StringBuffersb)方法貝 U 將最后一次匹配工作后剩余的字符串添加到一個 StringBuffer 對象里。例如,有字符串
15、 fatcatfatcatfat,假設(shè)既有正則表達式模式為cat,第一次匹配后調(diào)用appendReplacement(sb,dog)那么這時 StringBuffersb 的內(nèi)容為 fatdog,也就是 fatcat中的 cat 被替換為 dog 并且與匹配子用前的內(nèi)容加到 sb 里,而第二次匹配后調(diào)用appendReplacement(sb,dog),那么sb的內(nèi)容就變?yōu)閒atdogfatdog,如果最后再調(diào)用一次appendTail(sb),那么 sb 最終的內(nèi)容將是 fatdogfatdogfat。還是有點模糊?那么我們來看個簡單的程序:/該例將把句子里的Kelvin改為Kevinimp
16、ortjava.util.regex.*;publicclassMatcherTestpublicstaticvoidmain(Stringargs)throwsException生成 Pattern 對象并且編譯一個簡單的正則表達式KelvinPatternp=Ppile(Kevin);用 Pattern 類的 matcher()方法生成一個 Matcher 對象Matcherm=p.matcher(KelvinLiandKelvinChanarebothworkinginKelvinChensKelvinSoftShopcompany);StringBuffersb=newStringBu
17、ffer();inti=0;使用 find()方法查找第一個匹配的對象booleanresult=m.find();/使用循環(huán)將句子里所力的 kelvin 找出并替換再將內(nèi)容加到 sb 里while(result)i+;m.appendReplacement(sb,Kevin);System.out.println(第+i+”次匹配后 sb 的內(nèi)容是:+sb);/繼續(xù)查找下一個匹配對象result=m.find();)/最后調(diào)用 appendTail(方法將最后一次匹配后的剩余字符串加到 sb 里;m.appendTail(sb);System.out.println(調(diào)用 m.appendT
18、ail(sb 后 sb 的最終內(nèi)容是:+sb.toString();)最終輸出結(jié)果為:第 1 次匹配后 sb 的內(nèi)容是:Kevin第 2 次匹配后 sb 的內(nèi)容是:KevinLiandKevin第 3 次匹配后 sb 的內(nèi)容是:KevinLiandKevinChanarebothworkinginKevin第 4 次匹配后 sb 的內(nèi)容是:KevinLiandKevinChanarebothworkinginKevinChensKevin調(diào)用 m.appendTail(sb 后 sb 的最終內(nèi)容是:KevinLiandKevinChanarebothworkinginKevinChensKev
19、inSoftShopcompany.看了上面這個例程是否對 appendReplacement(),appendTail(M 個方法的使用更清楚呢,如果還是不太肯定最好自己動手寫幾行代碼測試一下。group()/group(intgroup)/groupCount():該系列方法與我們在上篇介紹的 Jakarta-ORO的 MatchResult.group()方法類似(有關(guān) Jakarta-ORO 請參考上篇的內(nèi)容),都是要返回與組匹配的子用內(nèi)容,下面代碼將很好解釋其用法:importjava.util.regex.*;publicclassGroupTestpublicstaticvoid
20、main(Stringargs)throwsExceptionPatternp=Ppile(ca)(t);Matcherm=p.matcher(onecat,twocatsintheyard);StringBuffersb=newStringBuffer();booleanresult=m.find();System.out.println(該次查找獲得匹配組的數(shù)量為:+m.groupCount();for(inti=1;i=m)輸出為:該次查找獲得匹配組的數(shù)量為:2第 1 組的子用內(nèi)容為:ca第 2 組的子用內(nèi)容為:tMatcher 對象的其他方法因比較好理解且由于篇幅有限,請讀者自己編程驗
21、證。4 .一個檢驗 Email 地址的小程序:最后我們來看一個檢驗 Email 地址的例程,該程序是用來檢驗一個輸入的 EMAIL 地址里所包含的字符是否合法,雖然這不是一個完整的 EMAIL 地址檢驗程序,它不能檢驗所有可能出現(xiàn)的情況,但在必要時您可以在其基礎(chǔ)上增加所需功能。importjava.util.regex.*;publicclassEmailpublicstaticvoidmain(Stringargs)throwsExceptionStringinput=args0;檢測輸入的 EMAIL 地址是否以非法符號.或作為起始字符Patternp=Ppile(A.1A);Matcherm=p.matcher(input);if(m檢測是否以www.為起始p=Ppile(Awww.);m=p.matcher(input);if(m/檢測是否包含非法字符p=Ppile(AA-Za-z0-9._-#+);m=p.matcher(input);StringBuffersb=newString
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國H型鋼自動焊接生產(chǎn)線設(shè)備數(shù)據(jù)監(jiān)測報告
- 2025年中國D-泛醇數(shù)據(jù)監(jiān)測報告
- 2025年中國48針插件數(shù)據(jù)監(jiān)測報告
- 2025年中國1,4-二氨基蒽醌數(shù)據(jù)監(jiān)測報告
- 2025至2030年中國高爾夫球鞋市場分析及競爭策略研究報告
- 2025至2030年中國裝配式鉑電阻市場分析及競爭策略研究報告
- 2025至2030年中國聚氨酯地坪材料市場分析及競爭策略研究報告
- 2025至2030年中國竹制座墊市場分析及競爭策略研究報告
- 2025至2030年中國電熱鍋爐用管狀電熱元件市場分析及競爭策略研究報告
- 2025至2030年中國洗護產(chǎn)品瓶市場分析及競爭策略研究報告
- 人工智能技術(shù)在醫(yī)療行業(yè)應(yīng)用案例研究報告
- 2025年高考云南卷歷史高考真題(無答案)
- 2025-2030中國輔助生殖技術(shù)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 中醫(yī)茶飲培訓(xùn)課件模板
- (湖北省高考卷)2024年湖北省普通高中學(xué)業(yè)水平選擇性考試高考物化生+政史地真題試卷及答案
- 2024-2025學(xué)年人教PEP英語六年級下學(xué)期期末模擬試卷(含答案含聽力原文無音頻)
- GSK質(zhì)量管理體系介紹培訓(xùn)課件
- 學(xué)生宿舍改造設(shè)計方案
- 出國培訓(xùn)考試試題及答案
- 2025年中國樂器網(wǎng)數(shù)據(jù)監(jiān)測研究報告
- 西方文化導(dǎo)論試題及答案
評論
0/150
提交評論