亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#正則表達式Regex類使用

2019-11-17 03:24:10
字體:
來源:轉載
供稿:網友

C#正則表達式Regex類使用

2014-01-15 23:16 by OshynSong, ... 閱讀, ... 評論, 收藏, 編輯

  作為文本處理的利器——Perl語言對正則表達式的最強大支持起到了重要的作用,正因為如此,許多其他語言在加入正則表達式引擎的時候都會或多或少的兼顧perl風格的正則表達式,開發出相應的引擎。本人使用perl語言處理文本有一些時間,同時也有幾年php開發的經歷,像php就有兼容perl的正則表達式引擎,其對應的正則表達式函數就是以p為前綴,如PReg_replace、preg_match、preg_split。.NET 類庫當然也提供了正則表達式的支持,位于System.Text.RegularExpressions命名空間下的Regex類封裝了所有正則表達式的屬性和使用方法。本文以C#語言詳細敘述一下.NET類庫下的這個Regex類,可以發現所有的語言對正則表達式的支持都是萬變不離其宗,以類比推理的方式學習非常好。

使用過正則表達式的朋友都知道,正則表達式就是指定一個規則去處理一些復雜的文本(如果是簡單的處理可以使用一般語言內置的字符串處理函數就可以了,而且效率會更好)。這樣需要達到的效果無非就是用一個模式去替換字符串中的特定項為另一特定項、用一個模式去匹配文本中感興趣的部分內容、用一個特殊的模式去拆分文本。

  • 構造函數:用于構造一個正則表達式對象,源碼的聲明如下:
其中聲明為public的構造函數是可以直接使用的,前者使用一個正則表達式字符串構造,后者使用正則表達式字符串和表達式選項構造對象。其中正則表達式選項RegexOptions是一個枚舉類型,用于設置正則表達式的模式修正,C#的這個選項有如下項目:Multiline —— 將字符串視為多行,“.”就不能匹配換行符(掩碼為2)Singleline—— 將字符串視為單行,“.”就可以匹配換行符(掩碼為16)IgnorePatternWhitespace —— 忽略模式表達式中的非轉義空白,并啟用#表示的注釋(掩碼為32)None —— 不設置選項(掩碼為0)IgnoreCase —— 忽略字符串中的大小寫(掩碼為1)RightToLeft —— 將默認的從左至右的搜索改為從右至左(掩碼為64)Compiled —— 將正則表達式編譯為程序集,可以加快運行速度,但是會增加啟動時間(掩碼為8)CultureInvariant —— 忽略語言中的區域性差異(掩碼為512)ExplicitCapture ——指定有效的捕獲僅為形式為 (?<name>...) 的顯式命名或編號的組,使得未命名的圓括號可以充當非捕獲組(掩碼為4)ECMAScript ——為表達式啟用符合 ECMAScript 的行為,只能與IgnoreCase、Multiline和Compiled選項一起使用(掩碼為256)上述選項都是使用掩碼方式存儲的,因此多個選項選擇的時候直接使用按位與“|”操作符連接起來即可。
  • 匹配(Match):使用模式進行匹配的時候,.NET提供了IsMatch和Match以及Matches三個函數,第一個返回布爾值用來表示是否匹配成功,第二個則是返回匹配得到的結果Match對象,包含了匹配的結果內容,第三個則是返回一個Match對象的集合,包含了所有匹配的對象。上述函數的所有聲明如下:
IsMatch提供了一個對輸入字符串進行匹配和指定起始位置匹配,同時也提供了對應的靜態函數,用于省去構造對象的麻煩,直接傳入模式進行匹配。使用如下代碼得到的結果如下圖。
            string text = @"12345qwert";            if (Regex.IsMatch(text, @"[/d]+"))            {                Console.WriteLine("success");            }            else            {                Console.WriteLine("fail");            }
Match函數也是同樣的提供了輸入字符串匹配,和指定起始位置開始匹配,或者同事指定匹配長度。對應的靜態版本類似。匹配成功返回的是一個Match對象,包含了如下信息:包含的匹配信息Capture、匹配得到的對應的分組信息Group,Capture包含了匹配得到的字符串Value、長度Length和在源字符串中的起始位置Index,Group則擁有組名稱、是否成功Success,同時Match對象包含了NextMatch屬性用于只想下一個匹配得到的Match對象(如果有多個匹配成功項的話),還有Result方法用一個字符串去替換當前匹配到的字符串。Match函數僅返回匹配到的第一個分組,也就是分組0,整個正則表達式匹配到的整體。Matches函數則是同樣提供了輸入字符串和指定起始位置開始,返回匹配得到的所有Match對象集合。
            string text = @"12345qwert67890";            Regex rg = new Regex( @"(?<first>[/d])/d+");            if (rg.IsMatch(text,0))            {                MatchCollection mts = rg.Matches(text,0);                foreach(Match mt in mts )                {                    Console.WriteLine("success:" + mt.Value);                }            }            else            {                Console.WriteLine("fail");            }
  • 替換(Replace):其實在Match函數中也提供了Result方法用來替換匹配項,但是功能不夠充分,以下是Regex類中的替換方法:
替換方法Replace方法可以直接對輸入文本替換成給定的文本,也有指定替換次數和起始位置。同時可以使用MatchEvaluator對象進行替換,此對象使用Replace單詞匹配到的Match對象為參數的一個委托,對每個匹配項進行替換。對于簡單的替換可以直接使用字符串參數替換匹配項以及指定替換次數或者起始位置,但是對于復雜的匹配則要使用MatchEvaluator委托進行,可以參考http://www.dotnetperls.com/regex-replace。
  • 分割(Split):分割為找到匹配項后以此階段源字符串,返回字符數組。定義如下:
這個方法的定義比較簡單,就是找到匹配項然后從此字符串拆分獲取拆分的結果,同時可以指定拆分的數組元素個數。測試如下:
            string text = @"12345qwert67890";            Regex rg = new Regex( @"(?<first>[/d])/d+");            string [] strArr = rg.Split(text,10);            foreach(string str in strArr )            {                Console.WriteLine("success:{0}", str);            }
從上述圖中結果可以看出,對于有分組的時候,是按照源字符串中的位置順序進行匹配都進行拆分。除上述內容外,.NET的Regex類還提供了如下方法:Unescape /Escape——轉換輸入字符串中的任何轉義字符 / 轉換普通字符為轉義字符CompileToAssembly ——將一個或多個指定的Regex 對象編譯為命名程序集GroupNameFromNumber /GroupNumberFromName —— 對命名過的分組得到組號或者相反操作GetGroupNames/GetGroupNumbers —— 返回匹配到的多組匹配項的組號或組名


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩精品入口| 日韩欧美精品在线观看| 日韩大陆欧美高清视频区| 视频在线观看一区二区| 亚洲女人初尝黑人巨大| 亚洲精品白浆高清久久久久久| 国产成人激情小视频| 国产色婷婷国产综合在线理论片a| 欧美香蕉大胸在线视频观看| 日韩小视频网址| 啪一啪鲁一鲁2019在线视频| 国产一区二区三区丝袜| 亚洲缚视频在线观看| 两个人的视频www国产精品| 日韩亚洲在线观看| 欧美日韩一区二区在线播放| 亚洲第一精品久久忘忧草社区| 久久久这里只有精品视频| 亚洲精品国偷自产在线99热| 亚洲黄页视频免费观看| 欧美激情视频在线免费观看 欧美视频免费一| 色一区av在线| 国产亚洲精品综合一区91| 久久夜精品香蕉| 欧美精品免费在线观看| 国产精品自产拍在线观| 亚洲a中文字幕| 日韩在线免费视频观看| 国产精品扒开腿做爽爽爽视频| 日韩久久免费视频| 国产在线观看精品| 久久精品国产免费观看| 国产亚洲人成a一在线v站| 欧美日韩国产成人| 欧美激情免费在线| 不用播放器成人网| 成人免费视频网址| 日韩av手机在线| 欧美在线视频免费播放| 欧美国产亚洲精品久久久8v| 久久影院资源站| 精品精品国产国产自在线| 亚洲免费高清视频| 欧美性极品xxxx娇小| 国产精品视频精品视频| 国产一区二区三区网站| 成人福利免费观看| 伊人成人开心激情综合网| 性欧美激情精品| 美女久久久久久久久久久| 亚洲国产精品va在线观看黑人| 日韩一中文字幕| 欧美大片免费观看在线观看网站推荐| 在线观看中文字幕亚洲| 日韩美女在线播放| 国产日韩欧美在线视频观看| 国产成人精品av| 日韩电影中文 亚洲精品乱码| 美女精品视频一区| 亚洲人成网站777色婷婷| 91精品国产九九九久久久亚洲| 国产精品男人的天堂| 国产中文日韩欧美| 色与欲影视天天看综合网| 亚洲福利视频久久| 57pao成人永久免费视频| 国产一区二区三区日韩欧美| 亚洲精品免费网站| 日韩在线免费av| 亚洲女人天堂色在线7777| 91丝袜美腿美女视频网站| 国产精品免费久久久久久| 久久久久久久电影一区| 国产亚洲精品一区二555| 欧美自拍大量在线观看| 综合国产在线观看| 亚洲精品丝袜日韩| 91久久精品日日躁夜夜躁国产| 国产色婷婷国产综合在线理论片a| 色与欲影视天天看综合网| 欧美色另类天堂2015| 国产自产女人91一区在线观看| 日韩视频精品在线| 91久久久久久久一区二区| 亚洲精品98久久久久久中文字幕| 日韩一区二区福利| 最新日韩中文字幕| 亚洲欧美精品在线| 亚洲福利在线看| 91精品国产91久久久久久吃药| 日日狠狠久久偷偷四色综合免费| 亚洲精品av在线| 精品国产乱码久久久久久婷婷| 亚洲一区二区三区在线免费观看| 欧美乱妇高清无乱码| 成人久久一区二区三区| 欧美激情在线有限公司| 日韩中文字幕在线播放| 久久欧美在线电影| 国产这里只有精品| 91精品国产91久久久久久吃药| 国产精品美女999| 免费99精品国产自在在线| 国产欧美精品日韩| 日韩av三级在线观看| 国产ts一区二区| 成人欧美一区二区三区在线| 国产精品久久在线观看| 亚洲欧美制服第一页| 最新69国产成人精品视频免费| 91中文在线视频| 欧美精品videosex牲欧美| 亚洲精品不卡在线| 午夜精品久久久久久久久久久久久| 国产不卡精品视男人的天堂| 91精品国产综合久久男男| 国模视频一区二区三区| 欧美激情一级精品国产| 日韩av免费看| 日韩av影院在线观看| 精品视频偷偷看在线观看| 欧美日韩在线视频一区| 成人a级免费视频| 中文字幕精品一区二区精品| 欧美午夜影院在线视频| 亚洲精品美女视频| 欧美中文在线观看| 亚洲国产精品专区久久| 成人a视频在线观看| 日韩女优在线播放| www.亚洲人.com| 欧美理论电影网| 国产精品国产亚洲伊人久久| 久久久国产精品一区| 色偷偷偷综合中文字幕;dd| 欧美日韩国产精品一区二区不卡中文| 欧美电影《睫毛膏》| 亚洲成人av在线| 91免费国产网站| 亚洲国产高清福利视频| 色无极亚洲影院| 国a精品视频大全| 精品国产鲁一鲁一区二区张丽| 国产精品久久97| 欧美激情综合亚洲一二区| 国产成人精品视频| 久久久最新网址| 国产成人在线一区二区| 欧美疯狂xxxx大交乱88av| 欧美第一黄网免费网站| 91免费版网站入口| 亚洲永久免费观看| 久久久久国产一区二区三区| 久久偷看各类女兵18女厕嘘嘘| 中国china体内裑精亚洲片| 久99久在线视频| 亚洲成人在线网| 这里只有精品在线播放| 最近更新的2019中文字幕| 亚洲国产中文字幕久久网| 国产精品日韩精品| 久久精品99久久久久久久久| 日韩中文在线中文网三级| 精品欧美激情精品一区|