版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第Java中正則表達式匹配過程實例詳解目錄下面是Java正則表達式的語法字符:正則表達式簡單的匹配過程:(1)基礎(chǔ)匹配過程(2)貪婪模式(3)非貪婪模式(4)零寬度匹配過程總結(jié)正則表達式:定義字符串的模式,用來對字符串進行搜索、編輯或處理文本。
目前的正則表達式引擎大體上可分為不同的兩類:DFA和NFA,而NFA又基本上可以分為傳統(tǒng)型NFA和POSIXNFA。
DFADeterministicfiniteautomaton確定型有窮自動機
NFANon-deterministicfiniteautomaton非確定型有窮自動機
Java使用的是傳統(tǒng)型NFA引擎。
下面是Java正則表達式的語法字符:
\
將下一字符標(biāo)記為特殊字符、文本、反向引用或八進制轉(zhuǎn)義符。例如,n匹配字符n。\n匹配換行符。序列\(zhòng)\\\匹配\\,\\(匹配(。
^
匹配輸入字符串開始的位置。如果設(shè)置了RegExp對象的Multiline屬性,^還會與\n或\r之后的位置匹配。
$
匹配輸入字符串結(jié)尾的位置。如果設(shè)置了RegExp對象的Multiline屬性,$還會與\n或\r之前的位置匹配。
*
零次或多次匹配前面的字符或子表達式。例如,zo*匹配z和zoo。*等效于{0,}。
+
一次或多次匹配前面的字符或子表達式。例如,zo+與zo和zoo匹配,但與z不匹配。+等效于{1,}。
零次或一次匹配前面的字符或子表達式。例如,do(es)匹配do或does中的do。等效于{0,1}。
{n}
n是非負整數(shù)。正好匹配n次。例如,o{2}與Bob中的o不匹配,但與food中的兩個o匹配。
{n,}
n是非負整數(shù)。至少匹配n次。例如,o{2,}不匹配Bob中的o,而匹配foooood中的所有o。o{1,}等效于o+。o{0,}等效于o*。
{n,m}
m和n是非負整數(shù),其中n=m。匹配至少n次,至多m次。例如,o{1,3}匹配fooooood中的頭三個o。o{0,1}等效于o。注意:您不能將空格插入逗號和數(shù)字之間。
當(dāng)此字符緊隨任何其他限定符(*、+、、{n}、{n,}、{n,m})之后時,匹配模式是非貪心的。非貪心的模式匹配搜索到的、盡可能短的字符串,而默認的貪心的模式匹配搜索到的、盡可能長的字符串。例如,在字符串oooo中,o+只匹配單個o,而o+匹配所有o。
.
匹配除\r\n之外的任何單個字符。若要匹配包括\r\n在內(nèi)的任意字符,請使用諸如[\s\S]之類的模式。
(pattern)
匹配pattern并捕獲該匹配的子表達式??梢允褂?0$9屬性從結(jié)果匹配集合中檢索捕獲的匹配。若要匹配括號字符(),請使用或者或者。
(:pattern)
匹配pattern但不捕獲該匹配的子表達式,即它是一個非捕獲匹配,不存儲供以后使用的匹配。這對于用or字符(|)組合模式部件的情況很有用。例如,industr(:y|ies)是比industry|industries更經(jīng)濟的表達式。
(=pattern)
執(zhí)行正向預(yù)測先行搜索的子表達式,該表達式匹配處于匹配pattern的字符串的起始點的字符串。它是一個非捕獲匹配,即不能捕獲供以后使用的匹配。例如,Windows(=95|98|NT|2000)匹配Windows2000中的Windows,但不匹配Windows3.1中的Windows。預(yù)測先行不占用字符,即發(fā)生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預(yù)測先行的字符后。
(!pattern)
執(zhí)行反向預(yù)測先行搜索的子表達式,該表達式匹配不處于匹配pattern的字符串的起始點的搜索字符串。它是一個非捕獲匹配,即不能捕獲供以后使用的匹配。例如,Windows(!95|98|NT|2000)匹配Windows3.1中的Windows,但不匹配Windows2000中的Windows。預(yù)測先行不占用字符,即發(fā)生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預(yù)測先行的字符后。
x|y
匹配x或y。例如,z|food匹配z或food。(z|f)ood匹配zood或food。
[xyz]
字符集。匹配包含的任一字符。例如,[abc]匹配plain中的a。
[^xyz]
反向字符集。匹配未包含的任何字符。例如,[^abc]匹配plain中p,l,i,n。
[a-z]
字符范圍。匹配指定范圍內(nèi)的任何字符。例如,[a-z]匹配a到z范圍內(nèi)的任何小寫字母。
[^a-z]
反向范圍字符。匹配不在指定的范圍內(nèi)的任何字符。例如,[^a-z]匹配任何不在a到z范圍內(nèi)的任何字符。
\b
匹配一個字邊界,即字與空格間的位置。例如,er\b匹配never中的er,但不匹配verb中的er。
\B
非字邊界匹配。er\B匹配verb中的er,但不匹配never中的er。
\cx
匹配x指示的控制字符。例如,\cM匹配Control-M或回車符。x的值必須在A-Z或a-z之間。如果不是這樣,則假定c就是c字符本身。
\d
數(shù)字字符匹配。等效于[0-9]。
\D
非數(shù)字字符匹配。等效于[^0-9]。
\f
換頁符匹配。等效于\x0c和\cL。
\n
換行符匹配。等效于\x0a和\cJ。
\r
匹配一個回車符。等效于\x0d和\cM。
\s
匹配任何空白字符,包括空格、制表符、換頁符等。與[\f\n\r\t\v]等效。
\S
匹配任何非空白字符。與[^\f\n\r\t\v]等效。
\t
制表符匹配。與\x09和\cI等效。
\v
垂直制表符匹配。與\x0b和\cK等效。
\w
匹配任何字類字符,包括下劃線。與[A-Za-z0-9_]等效。
\W
與任何非單詞字符匹配。與[^A-Za-z0-9_]等效。
\xn
匹配n,此處的n是一個十六進制轉(zhuǎn)義碼。十六進制轉(zhuǎn)義碼必須正好是兩位數(shù)長。例如,\x41匹配A。\x041與\x041等效。允許在正則表達式中使用ASCII代碼。
\num
匹配num,此處的num是一個正整數(shù)。到捕獲匹配的反向引用。例如,(.)\1匹配兩個連續(xù)的相同字符。
\n
標(biāo)識一個八進制轉(zhuǎn)義碼或反向引用。如果\n前面至少有n個捕獲子表達式,那么n是反向引用。否則,如果n是八進制數(shù)(0-7),那么n是八進制轉(zhuǎn)義碼。
\nm
標(biāo)識一個八進制轉(zhuǎn)義碼或反向引用。如果\nm前面至少有nm個捕獲子表達式,那么nm是反向引用。如果\nm前面至少有n個捕獲,則n是反向引用,后面跟有字符m。如果兩種前面的情況都不存在,則\nm匹配八進制值nm,其中n和m是八進制數(shù)字(0-7)。
\nml
當(dāng)n是八進制數(shù)(0-3),m和l是八進制數(shù)(0-7)時,匹配八進制轉(zhuǎn)義碼nml。
\un
匹配n,其中n是以四位十六進制數(shù)表示的Unicode字符。例如,\u00A9匹配版權(quán)符號()。
正則的匹配過程,通常情況下都是由一個子表達式(可能為一個普通字符、元字符或元字符序列組成)取得控制權(quán),從字符串的某一位置開始嘗試匹配,一個子表達式開始嘗試匹配的位置,是從前一子表達匹配成功的結(jié)束位置開始的。如果匹配到字符串某一位置時整個表達式匹配失敗,那么引擎會使正則向前傳動,整個表達式從下一位開始重新嘗試匹配,依此類推,直到報告匹配成功或嘗試到最后一個位置后報告匹配失敗。
正則表達式簡單的匹配過程:
代碼為pattern為正則表達式對content進行匹配
(1)基礎(chǔ)匹配過程
publicstaticvoidmain(String[]args){
Stringcontent="abc";
Stringpattern="abc";
System.out.println(content.matches(pattern));
匹配過程:
首先由字符a取得控制權(quán),由a來匹配a,匹配成功,控制權(quán)交給字符b;由于a已被a匹配,所以b從位置1開始嘗試匹配,由b來匹配b,匹配成功,控制權(quán)交給c;由c來匹配c,匹配成功放回true。
(2)貪婪模式
publicstaticvoidmain(String[]args){
Stringcontent="abc";
Stringpattern="abc";
System.out.println(content.matches(pattern));
量詞屬于匹配優(yōu)先量詞,在可匹配可不匹配時,會先選擇嘗試匹配,只有這種選擇會使整個表達式無法匹配成功時,才會嘗試讓出匹配到的內(nèi)容。這里的量詞是用來修飾字符b的,所以b是一個整體。
匹配過程:
首先由字符a取得控制權(quán),由a來匹配a,匹配成功,控制權(quán)交給字符b;由于是匹配優(yōu)先量詞,所以會先嘗試進行匹配,由b來匹配b,匹配成功,控制權(quán)交給c,同時記錄一個備選狀態(tài);由c來匹配c,匹配成功。記錄的備選狀態(tài)丟棄。
publicstaticvoidmain(String[]args){
Stringcontent="abd";
Stringpattern="abc";
System.out.println(content.matches(pattern));
}
匹配過程:
首先由字符a取得控制權(quán),,由a來匹配a,匹配成功,控制權(quán)交給字符b;先嘗試進行匹配,由b來匹配b,同時記錄一個備選狀態(tài),匹配成功,控制權(quán)交給c;由c來匹配d,匹配失敗,此時進行回溯,找到記錄的備選狀態(tài),b忽略匹配,即b不匹配b,讓出控制權(quán),把控制權(quán)交給c;由c來匹配b,匹配失敗。此時第一輪匹配嘗試失敗。
正則引擎使正則向前傳動,由位置1開始嘗試匹配,由a來匹配b,匹配失敗,沒有備選狀態(tài),第二輪匹配嘗試失敗。
繼續(xù)向前傳動,直到所有嘗試匹配失敗,匹配結(jié)束。此時報告整個表達式匹配失敗。
(3)非貪婪模式
publicstaticvoidmain(String[]args){
Stringcontent="abc";
Stringpattern="abc";
System.out.println(content.matches(pattern));
量詞屬于忽略優(yōu)先量詞,在可匹配可不匹配時,會先選擇不匹配,只有這種選擇會使整個表達式無法匹配成功時,才會嘗試進行匹配。這里的量詞是用來修飾字符b的,所以b是一個整體。
匹配過程:
首先由字符a取得控制權(quán),由a來匹配a,匹配成功,控制權(quán)交給字符b;先嘗試忽略匹配,即b不進行匹配,同時記錄一個備選狀態(tài),控制權(quán)交給c;由c來匹配b,匹配失敗,此時進行回溯,找到記錄的備選狀態(tài),b嘗試匹配,即b來匹配b,匹配成功,把控制權(quán)交給c;由c來匹配c,匹配成功。
(4)零寬度匹配過程
所謂零寬斷言,簡單來說就是匹配一個位置,這個位置滿足某個正則,但是不納入匹配結(jié)果的,所以叫零寬,而且這個位置的前面或后面需要滿足某種正則。
publicstaticvoidmain(String[]args){
Stringcontent="abc";
Stringpattern="^(=[a-z])[a-z0-9]+$";
System.out.println(content.matches(pattern));
元字符^和$匹配的只是位置,順序環(huán)視(=[a-z])只進行匹配,并不占有字符,也不將匹配的內(nèi)容保存到最終的匹配結(jié)果,所以都是零寬度的。
這個正則的意義就是匹配由字母或數(shù)字組成的,第一個字符是字母的字符串。
匹配過程:
首先由元字符^取得控制權(quán),從開始位置開始匹配,匹配成功,控制權(quán)交給順序環(huán)視(=[a-z]);
(=[a-z])要求它所在位置右側(cè)必須是
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年單招動漫制作設(shè)計筆試題及答案
- 2025年c語言經(jīng)常出的筆試題及答案
- 2025年省臺州市事業(yè)單位考試及答案
- 2025年真途事業(yè)單位考試試題及答案
- 2025年武漢市人事事業(yè)編制考試及答案
- 2025年農(nóng)行筆試特色題型及答案
- 2026年商業(yè)秘密管理規(guī)范培訓(xùn)
- 2026新興際華集團所屬中新聯(lián)公司招聘事業(yè)部總經(jīng)理副總經(jīng)理考試備考題庫及答案解析
- 2025年大慶大同事業(yè)編考試題及答案
- 2026年工程地質(zhì)條件下的地下空間利用
- 數(shù)據(jù)資產(chǎn)價值評估模型構(gòu)建與分析
- 市政污水管道有限空間作業(yè)方案
- 2026中國電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會成熟人才招聘備考題庫及1套參考答案詳解
- 2026年秦皇島煙草機械有限責(zé)任公司招聘(21人)考試參考試題及答案解析
- 職場關(guān)鍵能力課件 4 時間管理
- 2026年甘肅平?jīng)龀缧趴h機關(guān)事業(yè)單位選調(diào)30人筆試備考題庫及答案解析
- 2026及未來5年中國電腦顯卡行業(yè)市場運行態(tài)勢及發(fā)展前景研判報告
- 智能體開發(fā)技術(shù)(Python+FastAPI版) 課件 第一章 大模型與智能體開發(fā)
- 少數(shù)民族語言怒語數(shù)字化傳播與年輕一代傳承意愿激發(fā)研究畢業(yè)論文答辯
- 2025年交管12123駕照學(xué)法減分考試題庫(附含答案)
- GB/T 20946-2007起重用短環(huán)鏈驗收總則
評論
0/150
提交評論