版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
5.7正則表達式5.7.1基礎(chǔ)知識1.正則表達式簡介(1)驗證。檢驗輸入字符串是否符合某個給定的模式。例如,校驗一個電話號碼是否遵循格式“(000)0000-0000”(此處的0表示一個數(shù)字)。(2)解析。分析輸入字符串以分解出它所包含的要素。例如,用模式“(*):(*)”分解出在HTTP頭中普遍應(yīng)用的“Key:Value”格式的頭信息。(3)文本處理。應(yīng)用程序常常需要有文本處理功能,比如單詞的查找替換、電子郵件的格式化或XML文檔的集成等,這些操作通常會涉及模式匹配的問題,要借助正則表達式。5.7正則表達式5.7.1基礎(chǔ)知識5.7.1基礎(chǔ)知識2.特殊字符在正則表達式中,一些字符具有特殊含義,參見表5.5。特殊字符含義[abc]a、b和c的任意一個字符[^abc]除了a、b和c之外的任意字符(否定)[a-zA-Z]從a到z或從A到Z的任意字符(范圍)[abc[hij]]任意a、b、c、h、i和j字符(并集)[a-z&&[hij]]任意h、i或j(交集)\s空白符(空格、tab、換行或回車)\S非空白符([^\s])\d數(shù)字[0-9]\D非數(shù)字[0-9]\w單詞字符(數(shù)字[0-9]、26個英文字母和下畫線_).除換行符\n之外的任何一個字符(要匹配“.”字符本身,請使用“\.”)\\反斜線字符\\uhhhh十六進制表示的unicode值為hhhh的字符5.7.1基礎(chǔ)知識2.特殊字符特殊字符含義5.7.1基礎(chǔ)知識以下對表5.5中的每一個特殊字符列舉一個示例,如下:System.out.println("b".matches("[abc]")); //打印trueSystem.out.println("b".matches("[^abc]")); //打印falseSystem.out.println("A".matches("[a-zA-Z]")); //打印trueSystem.out.println("A".matches("[a-z[A-Z]]")); //打印trueSystem.out.println("R".matches("[A-Z&&[RFG]]")); //打印trueSystem.out.println("\n\t".matches("\\s{2}")); //打印trueSystem.out.println("".matches("\\S")); //打印falseSystem.out.println("3".matches("\\d")); //打印trueSystem.out.println("&".matches("\\D")); //打印trueSystem.out.println("a_8".matches("\\w{3}")); //打印trueSystem.out.println("\n".matches(".")); //打印falseSystem.out.println("\\u0041\\\\".matches("A\")); //打印true5.7.1基礎(chǔ)知識以下對表5.5中的每一個特殊字符列舉一5.7.1基礎(chǔ)知識3.量詞量詞決定表達式將被匹配的次數(shù),以簡化表達式的編寫,表5.6列出了一些量詞所表示字符的出現(xiàn)次數(shù)。量詞描述X*0個或多個X(最大匹配)X+1個或多個X(最大匹配)X?0個或1個X(最大匹配)X{n}恰好n個XX{n,}至少n個XX{n,m}至少n個X,不多于m個XX*?0個或多個X(最小匹配)X+?1個或多個X(最小匹配)X??0個或1個X(最小匹配)XYX后跟YX|YX或Y(X)定義捕獲組\n與第n個捕獲組相匹配的字串5.7.1基礎(chǔ)知識3.量詞量詞描述X*05.7.1基礎(chǔ)知識以下就表5.6中的幾個典型量詞列舉一些示例,如下:System.out.println("aaaa".matches("a*")); //打印trueSystem.out.println("aaaa".matches("a+")); //打印trueSystem.out.println("aaaa".matches("a?")); //打印falseSystem.out.println("".matches("a?")); //打印trueSystem.out.println("aaaa".matches("a{4}")); //打印trueSystem.out.println("abcabcabc".matches("(abc){2,}")); //打印trueSystem.out.println("4563456257".matches("\\d{3,10}")); //打印true5.7.1基礎(chǔ)知識以下就表5.6中的幾個典型量詞列舉一些5.7.1基礎(chǔ)知識4.常用表達式設(shè)計下面的位置匹配,用于匹配串中的位置。(1)(?=X):與這樣的位置相匹配,其右部能匹配X。(2)(?!X):與這樣的位置相匹配,其右部不能匹配X。(3)(?<=X):與這樣的位置相匹配,其左部能匹配X。(4)(?<!X):與這樣的位置相匹配,其左部不能匹配X。5.7.1基礎(chǔ)知識4.常用表達式設(shè)計5.7.1基礎(chǔ)知識運用以上正則式規(guī)則,可設(shè)計如下常用的正則表達式。(1)數(shù)字串:\d+,在Java中表示為“\\d+”。(2)英文單詞:[a-zA-Z]+,在Java中表示為“[a-zA-Z]+”。(3)一個漢字:[\u4e00-\u9fa5],在Java中表示為“[\\u4e00-\\u9fa5]”。(4)漢字串:[\u4e00-\u9fa5]+,在Java中表示為“[\\u4e00-\\u9fa5]+”。(5)IP地址:(\d{1,3}\.){3}\d{1,3},在Java中表示為“(\\d{1,3}\\.){3}\\d{1,3}”。(6)重復(fù)字符壓縮:將字符串中連續(xù)重復(fù)的字符壓縮成一個。例如,“aaabbbcccddd11122++***…33”壓縮成“abcd12+*.3”。相關(guān)代碼是:設(shè)Strings=“”;;則Stringrs=s.replaceAll(“(.)(\\1)*”,“$1”);。(7)特定子串提?。豪纾琒trings="%...%CXLL=add1,31,123.12%CXLL=add2,32,124%CXLL=,33,125.12%LL=-121.11";從中提取出%CXLL=add1,31,123,123.12,%CXLL=add2,32,124.12,%CXLL=,33,125.12。提取的正則式設(shè)計成“%CXLL=.*?(?=%)”,Java中表示為“%CXLL=.*?(?=%)”。(8)串格式:不能以bug打頭但可以由字母、數(shù)字組成的8~12個數(shù)的字符串。正則式為“(?!bug)[a-zA-Z0-9]{8-12}”。5.7.1基礎(chǔ)知識運用以上正則式規(guī)則,可設(shè)計如下常用的正5.7.1基礎(chǔ)知識(2)Matcher類Matcher類的實例用于根據(jù)給定的模式,對字符串進行匹配。使用CharSequence接口把輸入的字符串提供給匹配器,以便支持來自不同輸入源的字符串的匹配。當(dāng)創(chuàng)建了匹配器之后,就可以用它來執(zhí)行以下3類不同的匹配操作:
matches()方法試圖根據(jù)此模式,對整個輸入序列進行匹配。
lookingAt()方法試圖根據(jù)此模式,從開始處對輸入序列進行匹配。
find()方法將掃描輸入序列,尋找下一個與此模式匹配的地方。5.7.1基礎(chǔ)知識(2)Matcher類5.7.2正則表達式的應(yīng)用1.字符串匹配【例5.12】使用正則表達式匹配輸入的字符串。打開“RunConfigurations”窗口,配置程序運行時的輸入?yún)?shù),在“Arguments”標(biāo)簽頁的“Programarguments”欄輸入“abcabcabcdefabc"abc+""(abc)+""(abc){2,}”,然后單擊“Run”按鈕運行程序,結(jié)果為:Input:"abcabcabcdefabc"Regularexpression:"abcabcabcdefabc"Match"abcabcabcdefabc"atpositions0-14Regularexpression:"abc+"Match"abc"atpositions0-2Match"abc"atpositions3-5Match"abc"atpositions6-8Match"abc"atpositions12-14Regularexpression:"(abc)+"Match"abcabcabc"atpositions0-8Match"abc"atpositions12-14Regularexpression:"(abc){2,}"Match"abcabcabc"atpositions0-85.7.2正則表達式的應(yīng)用1.字符串匹配例5.12TestRegex.javaimportjava.util.regex.*;publicclassTestRegex{ publicstaticvoidmain(String[]args){ if(args.length<2){ System.out.println("Usage:\njavaTestRegex" +"characterSequenceregularExpression+"); System.exit(0); } System.out.println("Input:\""+args[0]+"\""); for(Stringarg:args){ System.out.println("Regularexpression:\""+arg+"\""); Patternp=Ppile(arg); Matcherm=p.matcher(args[0]); while(m.find()){ System.out.println("Match\""+m.group()+"\"atpositions" +m.start()+"-"+(m.end()-1)); } }}}例5.12TestRegex.javaimportjav5.7.2正則表達式的應(yīng)用2.字符串分析【例5.13】用正則表達式對一個由數(shù)字和非數(shù)字組成的字符串進行分析,要求:將其中每段連續(xù)的數(shù)字字符轉(zhuǎn)換成一個整數(shù),若連續(xù)的數(shù)字字符個數(shù)超過4個,則以4個數(shù)字為一組進行轉(zhuǎn)換,轉(zhuǎn)換生成的整數(shù)依次存入整型數(shù)組中。例如,對“c789yz45!786*+56abc123456789”分析后得到的數(shù)組內(nèi)容為:789、45、786、56、1234、5678、9。程序運行結(jié)果:7894578656123456789
5.7.2正則表達式的應(yīng)用2.字符串分析例5.13GetNumber.javaimportjava.util.regex.*;publicclassGetNumber{ publicstaticvoidmain(String[]args){ int[]arr=newint[10]; //創(chuàng)建1個整型數(shù)組 Patternp=Ppile("(\\d{1,4})"); //編譯正則表達式,要求1個到4個數(shù)字 Strings="c789yz45!786*+56abc123456789"; Matcherm=p.matcher(s); //對字符串進行匹配 inti=0; while(m.find()){ //尋找與指定模式匹配的下一個子序列 intj=0; j=Integer.parseInt(m.group()); //將字符串類型轉(zhuǎn)換為整型 arr[i]=j; i++; } for(intc=0;c<i;c++){ System.out.println(arr[c]); //打印數(shù)組的內(nèi)容 } }}例5.13GetNumber.javaimportjav5.7.2正則表達式的應(yīng)用3.文本替換正則表達式最擅長于替換文本,有多種方法實現(xiàn),如下。replaceFirst(Stringreplacement):以repacement替換掉第一個匹配成功的部分。replaceAll(Stringreplacement):以repacement替換掉所有匹配成功的部分。appendReplacement(StringBufferbuf,Stringreplacement):執(zhí)行漸進式替換,允許再調(diào)用其他方法來生成或處理repacement,能夠以編程的方式將目標(biāo)分隔成組,從而實現(xiàn)更為強大的替換功能。appendTail(StringBufferbuf):在執(zhí)行了一次或多次appendReplacement()之后,調(diào)用此方法可以將輸入字符串余下的部分復(fù)制到buf中。【例5.14】將字符串奇數(shù)序列的“java”替換為小寫,偶數(shù)序列的“java”替換成大寫。程序運行結(jié)果:javaJAVAjavaJAVAIlovejavayoudislikeJAVA5.7.2正則表達式的應(yīng)用3.文本替換例5.14TestReplaceimportjava.util.regex.*;publicclassTestReplace{ publicstaticvoidmain(String[]args){ Patternp=Ppile("java",Pattern.CASE_INSENSITIVE);//不區(qū)分大小寫 Matcherm=p.matcher("JavajavaJAvaJAVAIloveJAVAyoudislikeJava"); StringBufferbuf=newStringBuffer();
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度個人旅游貸款擔(dān)保合同范本2篇
- 二零二五年度個人車輛抵押債務(wù)清償協(xié)議書4篇
- 差旅費報銷管理制度8篇
- 二零二五年度互聯(lián)網(wǎng)行業(yè)勞務(wù)派遣人員培訓(xùn)合同3篇
- 股份融資協(xié)議書
- 辦公樓租賃合同
- 小車轉(zhuǎn)讓協(xié)議書
- 2025年個人住房抵押貸款合同電子簽章操作范本3篇
- 二零二四年建筑弱電改造節(jié)能環(huán)保施工合同3篇
- 旅游地產(chǎn)項目推廣居間合同
- 成品移動公廁施工方案
- 2025年度部隊食堂食材采購與質(zhì)量追溯服務(wù)合同3篇
- 新人教版一年級下冊數(shù)學(xué)教案集體備課
- 消防產(chǎn)品目錄(2025年修訂本)
- 地方性分異規(guī)律下的植被演替課件高三地理二輪專題復(fù)習(xí)
- 繪本 課件教學(xué)課件
- 光伏項目風(fēng)險控制與安全方案
- 9.2提高防護能力教學(xué)設(shè)計 2024-2025學(xué)年統(tǒng)編版道德與法治七年級上冊
- 催收培訓(xùn)制度
- 牧場物語-礦石鎮(zhèn)的伙伴們-完全攻略
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理體系 審核與認證機構(gòu)要求》中文版(機翻)
評論
0/150
提交評論