中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#正則表達式匹配引擎是什么

發布時間:2021-12-03 09:56:20 來源:億速云 閱讀:146 作者:iii 欄目:編程語言

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

現在,我們通過一個組結構來理解一個稍微復雜的例子。看下面的C#正則表達式匹配引擎的細節例子:

string text = "abracadabra1abracadabra2abracadabra3";        string pat = @"        ( # ***個組的開始         abra # 匹配字符串abra         ( # 第二個組的開始         cad # 匹配字符串cad         )? # 第二個組結束(可選)        ) # ***個組結束        + # 匹配一次或多次        ";        //利用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#正則表達式匹配引擎的細節實例的輸出如下所示:

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中包含有表達式。***個capture是從***個圓括號開始的,然后表達式將匹配到一個abra。第二個capture組從第二個圓括號開始,但***個capture組還沒有結束,這意味著***個組匹配的結果是abracad ,而第二個組的匹配結果僅僅是cad。因此如果通過使用?符號而使cad成為一項可選的匹配,匹配的結果就可能是abra或abracad。然后,***個組就會結束,通過指定+符號要求表達式進行多次匹配。

現在我們來看看匹配過程中發生的情況。首先,通過調用Regex的constructor方法建立表達式的一個實例,并在其中指定各種選項。在這個例子中,由于在表達式中有注釋,因此選用了x選項,另外還使用了一些空格。打開x選項,表達式將會忽略注釋和其中沒有轉義的空格。

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

接下來是完成***次匹配。通過一個循環測試當前的匹配是否成功,接下來是從group 1開始重復對組清單執行這一操作。在這個例子中沒有使用group 0的原因是group 0是一個完全匹配的字符串,如果要通過收集全部匹配的字符串作為一個單一的字符串,就會用到group 0了。

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

到此,關于“C#正則表達式匹配引擎是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霍城县| 环江| 西充县| 牟定县| 县级市| 西乌| 九龙坡区| 盐津县| 开江县| 建昌县| 盈江县| 朝阳市| 淅川县| 吴桥县| 孙吴县| 伊通| 龙胜| 文安县| 乌拉特前旗| 尚义县| 盘锦市| 兴安盟| 英山县| 广元市| 喜德县| 澄江县| 云阳县| 嘉鱼县| 哈尔滨市| 于都县| 汝城县| 慈溪市| 梅河口市| 满城县| 富平县| 婺源县| 行唐县| 广安市| 济阳县| 绿春县| 海城市|