版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、正則表達(dá)式之捕獲組/非捕獲組介紹使用小括號(hào)指定一個(gè)子表達(dá)式后,匹配這個(gè)子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。捕獲組 語(yǔ)法: 字符 描述示例(pattern)匹配pattern并捕獲結(jié)果,自動(dòng)設(shè)置組號(hào)。(abc)+d匹配abcd或者abcabcd(?<name>pattern)或(?'name'pattern)匹配pattern并捕獲結(jié)果,設(shè)置name為組名。num對(duì)捕獲組的反向引用。其中 num 是一個(gè)正整數(shù)。(w)(w)21匹配abbak< name >或k' name '對(duì)命名捕獲組的反向引用
2、。其中 name 是捕獲組名。(?<group>w)abck<group>匹配xabcx使用小括號(hào)指定一個(gè)子表達(dá)式后,匹配這個(gè)子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。默認(rèn)情況下,每個(gè)捕獲組會(huì)自動(dòng)擁有一個(gè)組號(hào),規(guī)則是:從左向右,以分組的左括號(hào)為標(biāo)志,第一個(gè)出現(xiàn)的分組的組號(hào)為1,第二個(gè)為2,以此類推。 例如: (d4)-(d2-(d2) 1 1 2 3 32 以下是用程序處理捕獲組的示例,對(duì)一個(gè)Url地址進(jìn)行解析,并顯示所有捕獲組。 可以看到按順序設(shè)置的捕獲組號(hào)。 Regex.Match方法 復(fù)制代碼 代碼如下:using Sular
3、Expressions; namespace Wuhong.Test class Program static void Main(string args) /目標(biāo)字符串 string source = " reg-test-server:8080/download/file1.html# " /正則式 string regex = "(w+):/(/:+)(:d+)?(# :*)" Regex regUrl = new Regex(regex); /匹配正則表達(dá)式 Match m = regUrl.Match(source); Console.Writ
4、eLine(m.Success); if (m.Success) /捕獲組存放在Match.Groups集合中,索引值從1開(kāi)始,索引0處為匹配的整個(gè)字符串值 /按“組號(hào) : 捕獲內(nèi)容”的格式顯示 for (int i = 0; i < m.Groups.Count; i+) Console.WriteLine(string.Format("0 : 1", i, m.Groupsi); Console.ReadLine(); 也可以自己指定子表達(dá)式的組名。這樣在表達(dá)式或程序中可以直接引用組名,當(dāng)然也可以繼續(xù)使用組號(hào)。但如果正則表達(dá)式中同時(shí)存在普通捕獲組和命名捕獲組,那么
5、捕獲組的編號(hào)就要特別注意,編號(hào)的規(guī)則是先對(duì)普通捕獲組進(jìn)行編號(hào),再對(duì)命名捕獲組進(jìn)行編號(hào)。 例如: (d4)-(?<date>d2-(d2) 1 1 3 2 23 下面在程序中處理命名捕獲組,顯示混合規(guī)則生成的組號(hào),并利用捕獲組的內(nèi)容對(duì)源字符串進(jìn)行替換。 可以看到先對(duì)普通捕獲組進(jìn)行編號(hào),再對(duì)命名捕獲組編號(hào)。 Regex.Replace方法 復(fù)制代碼 代碼如下:using System.Text.RegularExpressions; namespace Wuhong.Test class Program static void Main(string args) /目標(biāo)字符串 stri
6、ng source = " reg-test-server:8080/download/file1.html# " /正則式,對(duì)其中兩個(gè)分組命名 string regex = "(w+):/(?<server>/:+)(?<port>:d+)?(# :*)" Regex regUrl = new Regex(regex); /匹配正則表達(dá)式 Match m = regUrl.Match(source); Console.WriteLine(m.Success); if (m.Success) /捕獲組存放在Match.Groups
7、集合中,索引值從1開(kāi)始,索引0處為匹配的整個(gè)字符串值 /按“組號(hào) : 捕獲內(nèi)容”的格式顯示 for (int i = 0; i < m.Groups.Count; i+) Console.WriteLine(string.Format("0 : 1", i, m.Groupsi); /替換字符串 /“$組號(hào)”引用捕獲組的內(nèi)容。 /需要特別注意的是“$組號(hào)”后不能跟數(shù)字形式的字符串,如果出現(xiàn)此情況,需要使用命名捕獲組,引用格式“$組名” string replacement = string.Format("$1:/01$2", "new-
8、reg-test-server", ""); string result = regUrl.Replace(source, replacement); Console.WriteLine(result); Console.ReadLine(); 非捕獲組 語(yǔ)法:字符 描述示例(?:pattern)匹配pattern,但不捕獲匹配結(jié)果。'industr(?:y|ies)匹配'industry'或'industries'。(?=pattern)零寬度正向預(yù)查,不捕獲匹配結(jié)果。'Windows (?=95|98|NT|20
9、00)'匹配 "Windows2000" 中的 "Windows"不匹配 "Windows3.1" 中的 "Windows"。(?!pattern)零寬度負(fù)向預(yù)查,不捕獲匹配結(jié)果。'Windows (?!95|98|NT|2000)'匹配 "Windows3.1" 中的 "Windows"不匹配 "Windows2000" 中的 "Windows"。(?<=pattern)零寬度正向回查,不捕獲匹配結(jié)果。&
10、#39;2000 (?<=Office|Word|Excel)'匹配 " Office2000" 中的 "2000"不匹配 "Windows2000" 中的 "2000"。(?<!pattern)零寬度負(fù)向回查,不捕獲匹配結(jié)果。'2000 (?<!Office|Word|Excel)'匹配 " Windows2000" 中的 "2000"不匹配 " Office2000" 中的 "2000"。非
11、捕獲組只匹配結(jié)果,但不捕獲結(jié)果,也不會(huì)分配組號(hào),當(dāng)然也不能在表達(dá)式和程序中做進(jìn)一步處理。 首先(?:pattern)與(pattern)不同之處只是在于不捕獲結(jié)果。 接下來(lái)的四個(gè)非捕獲組用于匹配pattern(或者不匹配pattern)位置之前(或之后)的內(nèi)容。匹配的結(jié)果不包括pattern。 例如: (?<=<(w+)>).*(?=</1>)匹配不包含屬性的簡(jiǎn)單HTML標(biāo)簽內(nèi)的內(nèi)容。如:<div>hello</div>之中的hello,匹配結(jié)果不包括前綴<div>和后綴</div>。 下面是程序中非捕獲組的示例,用
12、來(lái)提取郵編。 可以看到反向回查和反向預(yù)查都沒(méi)有被捕獲。 Regex.Matches方法 復(fù)制代碼 代碼如下:using SlarExpressions; namespace Wuhong.Test class Program static void Main(string args) /目標(biāo)字符串 string source = "有6組數(shù)字:010001,100,21000,310000,4100011,510002,把郵編挑出來(lái)。" /正則式 string regex = "(?<!d)(1-9d5)(?!d)" Regex regUrl = new Regex(regex); /獲取所有匹配 MatchCollection mList = regUrl.Matches(source); for (int j = 0; j < mList.Count; j+) /顯示每個(gè)分組,可以看到每個(gè)分組都只有組號(hào)為1的項(xiàng),反向回查和反向預(yù)查沒(méi)有被捕獲 for (int i = 0; i < mListj.Groups.Count; i+) Console.WriteL
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療械加工廠合同
- 商業(yè)綜合體泥水施工合同
- 機(jī)電安裝工程師聘用合同樣本
- 購(gòu)買(mǎi)家具合同協(xié)議書(shū)范本(2篇)
- 外包合同安全責(zé)任條款
- 工商租賃協(xié)議書(shū)范本
- 集體房屋租賃協(xié)議書(shū)
- 防侵權(quán)合同范例
- 土豆合同范例
- 首爾房租中介轉(zhuǎn)租合同范例
- 軟件開(kāi)發(fā)項(xiàng)目監(jiān)理細(xì)則
- (必會(huì))軍隊(duì)文職(藥學(xué))近年考試真題題庫(kù)(含答案解析)
- 醫(yī)院后勤副院長(zhǎng)年終工作總結(jié)
- 2024年醫(yī)院物價(jià)管理制度范例(四篇)
- 登高車高空作業(yè)施工方案
- 2024年新人教版四年級(jí)數(shù)學(xué)上冊(cè)《第9單元第4課時(shí) 統(tǒng)計(jì)與數(shù)學(xué)廣角 總復(fù)習(xí)》教學(xué)課件
- GB/T 15822.3-2024無(wú)損檢測(cè)磁粉檢測(cè)第3部分:設(shè)備
- 金庸人物課件
- 智能電能表應(yīng)用配套安裝投標(biāo)方案(技術(shù)方案)
- 2024年平面設(shè)計(jì)師技能及理論知識(shí)考試題庫(kù)(附含答案)
- TSHJX 061-2024 上海市域鐵路工程施工監(jiān)測(cè)技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論