C#正則表達(dá)式匹配引擎是什么

這篇文章主要介紹“C#正則表達(dá)式匹配引擎是什么”,在日常操作中,相信很多人在C#正則表達(dá)式匹配引擎是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C#正則表達(dá)式匹配引擎是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)長(zhǎng)期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為海南企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站建設(shè),海南網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

現(xiàn)在,我們通過(guò)一個(gè)組結(jié)構(gòu)來(lái)理解一個(gè)稍微復(fù)雜的例子??聪旅娴腃#正則表達(dá)式匹配引擎的細(xì)節(jié)例子:

string text = "abracadabra1abracadabra2abracadabra3";        string pat = @"        ( # ***個(gè)組的開始         abra # 匹配字符串a(chǎn)bra         ( # 第二個(gè)組的開始         cad # 匹配字符串cad         )? # 第二個(gè)組結(jié)束(可選)        ) # ***個(gè)組結(jié)束        + # 匹配一次或多次        ";        //利用x修飾符忽略注釋        Regex r = new Regex(pat, "x");        //獲得組號(hào)碼的清單        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()+"]");        //計(jì)算這個(gè)組的起始位置和長(zhǎng)度        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);         }        }        //下一個(gè)匹配         m = m.NextMatch();         }

這個(gè)C#正則表達(dá)式匹配引擎的細(xì)節(jié)實(shí)例的輸出如下所示:

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á)式。***個(gè)capture是從***個(gè)圓括號(hào)開始的,然后表達(dá)式將匹配到一個(gè)abra。第二個(gè)capture組從第二個(gè)圓括號(hào)開始,但***個(gè)capture組還沒有結(jié)束,這意味著***個(gè)組匹配的結(jié)果是abracad ,而第二個(gè)組的匹配結(jié)果僅僅是cad。因此如果通過(guò)使用?符號(hào)而使cad成為一項(xiàng)可選的匹配,匹配的結(jié)果就可能是abra或abracad。然后,***個(gè)組就會(huì)結(jié)束,通過(guò)指定+符號(hào)要求表達(dá)式進(jìn)行多次匹配。

現(xiàn)在我們來(lái)看看匹配過(guò)程中發(fā)生的情況。首先,通過(guò)調(diào)用Regex的constructor方法建立表達(dá)式的一個(gè)實(shí)例,并在其中指定各種選項(xiàng)。在這個(gè)例子中,由于在表達(dá)式中有注釋,因此選用了x選項(xiàng),另外還使用了一些空格。打開x選項(xiàng),表達(dá)式將會(huì)忽略注釋和其中沒有轉(zhuǎn)義的空格。

然后,取得表達(dá)式中定義的組的編號(hào)的清單。你當(dāng)然可以顯性地使用這些編號(hào),在這里使用的是編程的方法。如果使用了命名的組,作為一種建立快速索引的途徑這種方法也十分有效。

接下來(lái)是完成***次匹配。通過(guò)一個(gè)循環(huán)測(cè)試當(dāng)前的匹配是否成功,接下來(lái)是從group 1開始重復(fù)對(duì)組清單執(zhí)行這一操作。在這個(gè)例子中沒有使用group 0的原因是group 0是一個(gè)完全匹配的字符串,如果要通過(guò)收集全部匹配的字符串作為一個(gè)單一的字符串,就會(huì)用到group 0了。

我們跟蹤每個(gè)group中的CaptureCollection。通常情況下每次匹配、每個(gè)group中只能有一個(gè)capture,但本例中的Group1則有兩個(gè)capture:Capture0和Capture1。如果你僅需要Group1的ToString,就會(huì)只得到abra,當(dāng)然它也會(huì)與abracad匹配。組中ToString的值就是其CaptureCollection中***一個(gè)Capture的值,這正是我們所需要的。如果你希望整個(gè)過(guò)程在匹配abra后結(jié)束,就應(yīng)該從表達(dá)式中刪除+符號(hào),讓regex引擎知道我們只需要對(duì)表達(dá)式進(jìn)行匹配。

到此,關(guān)于“C#正則表達(dá)式匹配引擎是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

文章名稱:C#正則表達(dá)式匹配引擎是什么
標(biāo)題鏈接:http://bm7419.com/article18/pciedp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、做網(wǎng)站關(guān)鍵詞優(yōu)化、網(wǎng)站制作網(wǎng)站收錄、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)