您好,登錄后才能下訂單哦!
這篇文章主要介紹“C#正則表達(dá)式匹配引擎是什么”,在日常操作中,相信很多人在C#正則表達(dá)式匹配引擎是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#正則表達(dá)式匹配引擎是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
現(xiàn)在,我們通過一個組結(jié)構(gòu)來理解一個稍微復(fù)雜的例子。看下面的C#正則表達(dá)式匹配引擎的細(xì)節(jié)例子:
string text = "abracadabra1abracadabra2abracadabra3"; string pat = @" ( # ***個組的開始 abra # 匹配字符串a(chǎn)bra ( # 第二個組的開始 cad # 匹配字符串cad )? # 第二個組結(jié)束(可選) ) # ***個組結(jié)束 + # 匹配一次或多次 "; //利用x修飾符忽略注釋 Regex r = new Regex(pat, "x"); //獲得組號碼的清單 int[] gnums = r.GetGroupNumbers(); //***匹配 Match m = r.Match(text); while (m.Success) { //從組1開始 for (int i = 1; i < gnums.Length; i++) { Group g = m.Group(gnums[i]); //獲得這次匹配的組 Console.WriteLine("Group"+gnums[i]+"=["+g.ToString()+"]"); //計算這個組的起始位置和長度 CaptureCollection cc = g.Captures; for (int j = 0; j < cc.Count; j++) { Capture c = cc[j]; Console.WriteLine(" Capture" + j + "=["+c.ToString() + "] Index=" + c.Index + " Length=" + c.Length); } } //下一個匹配 m = m.NextMatch(); }
這個C#正則表達(dá)式匹配引擎的細(xì)節(jié)實例的輸出如下所示:
Group1=[abra] Capture0=[abracad] Index=0 Length=7 Capture1=[abra] Index=7 Length=4 Group2=[cad] Capture0=[cad] Index=4 Length=3 Group1=[abra] Capture0=[abracad] Index=12 Length=7 Capture1=[abra] Index=19 Length=4 Group2=[cad] Capture0=[cad] Index=16 Length=3 Group1=[abra] Capture0=[abracad] Index=24 Length=7 Capture1=[abra] Index=31 Length=4 Group2=[cad] Capture0=[cad] Index=28 Length=3
我們首先從考查字符串pat開始,pat中包含有表達(dá)式。***個capture是從***個圓括號開始的,然后表達(dá)式將匹配到一個abra。第二個capture組從第二個圓括號開始,但***個capture組還沒有結(jié)束,這意味著***個組匹配的結(jié)果是abracad ,而第二個組的匹配結(jié)果僅僅是cad。因此如果通過使用?符號而使cad成為一項可選的匹配,匹配的結(jié)果就可能是abra或abracad。然后,***個組就會結(jié)束,通過指定+符號要求表達(dá)式進(jìn)行多次匹配。
現(xiàn)在我們來看看匹配過程中發(fā)生的情況。首先,通過調(diào)用Regex的constructor方法建立表達(dá)式的一個實例,并在其中指定各種選項。在這個例子中,由于在表達(dá)式中有注釋,因此選用了x選項,另外還使用了一些空格。打開x選項,表達(dá)式將會忽略注釋和其中沒有轉(zhuǎn)義的空格。
然后,取得表達(dá)式中定義的組的編號的清單。你當(dāng)然可以顯性地使用這些編號,在這里使用的是編程的方法。如果使用了命名的組,作為一種建立快速索引的途徑這種方法也十分有效。
接下來是完成***次匹配。通過一個循環(huán)測試當(dāng)前的匹配是否成功,接下來是從group 1開始重復(fù)對組清單執(zhí)行這一操作。在這個例子中沒有使用group 0的原因是group 0是一個完全匹配的字符串,如果要通過收集全部匹配的字符串作為一個單一的字符串,就會用到group 0了。
我們跟蹤每個group中的CaptureCollection。通常情況下每次匹配、每個group中只能有一個capture,但本例中的Group1則有兩個capture:Capture0和Capture1。如果你僅需要Group1的ToString,就會只得到abra,當(dāng)然它也會與abracad匹配。組中ToString的值就是其CaptureCollection中***一個Capture的值,這正是我們所需要的。如果你希望整個過程在匹配abra后結(jié)束,就應(yīng)該從表達(dá)式中刪除+符號,讓regex引擎知道我們只需要對表達(dá)式進(jìn)行匹配。
到此,關(guān)于“C#正則表達(dá)式匹配引擎是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。