程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#菜鳥正則表達式一,

C#菜鳥正則表達式一,

編輯:C#入門知識

C#菜鳥正則表達式一,


  LZ菜鳥,僅整理筆記,順帶記錄一下,謂之增加印象。

  LZ認為,沒必要太糾結原理,模型, 屌絲能用就對了,剩下的事情用多了自然會去探索。

     中文:正則表達式,英文:Regular  ExPression,也叫匹配模式(pattern),用來檢驗字符串是否滿足特定的規則,或從字符串捕獲滿足特定規則的子串。

     字符匹配

     最簡單的正則表達式由“普通字符”和“通配符”組成。比如“Room\d\d\d”就是這樣的正則表達式。

    

     其中 “Room” 是普通字符,而“\d”是通配符,表示該位置上有一個數字。該表達式一共占用了7個位置,第一個位置上是字母“R”,而第二個和第三個位置上都是位置“o”,第四個位置上是“m”,而第五個到第七個位置上是三個數字。所以正則表達式“Room\d\d\d”代表著以“Room”開頭,以三個數字結尾的那一類字符串。比如字符串”Room010”,"Room111"都與“Room\d\d\d”匹配。

      

    這些特殊字符在正則表達式中稱為元字。因為符號“ . ”在正則表達式裡已有特殊符用處,所以要想表達“ . ”本身,需要使用它的轉移符 “ \. ”,同樣表達符號 ”\“本身,需要使用它的轉移符”\\“。

    .NET提供了一批與正則表達式相關的類,它們都位於 using System.Text.RegularExpressions  命名空間裡,現在我們來看下Regex類。

 

 

  Regex類的部分方法

    

      通過Regex.Matches()方法,可以從給定字符串中分解出所有與正則表達式匹配的子串,這些子串被保存在一個MatchCollection 型的集合中,每個子串都被看做Match類的對象。現在假設某份電子文件裡包含著Kitty的房間號(格式如前面的 RoomXXX),檔案很長,人工查閱費時費力,那麼如何通過計算機幫我們找到房間號呢? 是時候祭出正則兄了!

     

 小例子時間到了:       
//命名空間 using System.Text.RegularExpressions; string text = "kitty住在room415,tonny住在room332"; Regex expression = new Regex(@"room\d\d\d"); MatchCollection mathes = expression.Matches(text);//匹配的結果是一個集合 foreach(Match match in mathes) Console.WriteLine(match); Match match1 = expression.Match(text);//匹配結果是單個 Console.WriteLine(match1); Console.WriteLine(match1.NextMatch());//下一個匹配 bool match2= expression.IsMatch(text);//是否有匹配 Console.WriteLine(match2);

            


 

     @前綴和轉移字符  

      我們前面學習過控制文本格式的轉移字符,如” \n “   " \" "   "  \t  "  " \\ "等,現在又學習了正則表達式的轉移字符,如 " \. "  "  \w "  " \d "  "  \s  " "  \\ "等,在正則中它們是有區別的。

      Regex exoression=new Regex("\d");

     這樣寫就會出現錯誤,因為反斜槓 ”  \ “ 本身就是一個特殊的字符,要想表示反斜槓本身,需要使用它的轉移符 ” \\ “ ,所以需要寫成下面的形式:

      Regex expression =new Regex("\\d"); 

      但是這種形式會降低可讀性,所以我們通常使用加 @ 前綴的方式。

  Regex expression =new Regex(@"\d");

      這時會忽略控制文本的格式的轉移符,但不忽略正則表達式的轉移符。

      添加前綴@後,如果字符串裡需要引用雙引號本身,就可以用連續的雙引號來表示。

      Regex expression=new Regex(@"Say ""Hello"" ")

 

      @可選字符集

      除了通配符外,我們還可以把某個位置上允許出現的字符卸載方括號 [] 內,組成可選字符集,比如:

     

 

//可選字符:
            string text = "Vitor-1970 Verne-1982 Regan-1998 Robin-2008";
            Regex regex = new Regex(@"[VR][a-z]+-19[89][0-9]");//[VR][a-z]第一個字符V或者R,第二個字符a到z,+ 號表示後面都是a-z
            foreach (Match match in regex.Matches(text))
            Console.WriteLine(match);

            反向字符:
            string text2 = "dog bod fog hog log";
            Regex regex2 = new Regex(@"[^bd]og"); //第一個字符非b或者d
            foreach(var match in regex2.Matches(text2))
       {
                Console.WriteLine(match);
            } Console.WriteLine(match);


 

        或匹配符

      

            string text3 = "there is a bee in the tree";
            Regex regex3 = new Regex(@"(tr|b)ee"); //tr或者b+ee
            foreach (var match in regex3.Matches(text3))
            Console.WriteLine(match);



 

  Tips:鑒於正則表達式難以書寫,常用的我們可以百度,入匹配注冊信息之類的,如果自己編寫不靠譜,可以使用 "Regex Tester"工具來測試。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved