自由學習正則表達式


               嘿嘿,今天家又停電啦,就來寫總結晚啦,只得等到現在啦,其實我們今天學習的是什么我已經不記得啦,由於這周給我們講.Net的老師飛去給其他班級上課,於是我們就聽課啦,而公司為了搪塞我們,給我們安排啦一個Oracle數據庫老師,本以為可以學到這個是我們的榮幸啦,可是意想不到的是坐在第一排的我們都難以聽到老師是什么,這個是給老師提建議啦,可是改變不了啊,這樣的一天,課堂氣氛甚是安靜啊,我們100度的學習熱度,最后一點點的下降到了零下,其實今天僅僅帶我們安裝Oracle數據庫,可想而知,我們下載完文件,也沒有安裝成功,這樣的一天就是這樣結束的,我們學生痛苦啊,我們在想想公司反映還是自己學習吧,但是想啦一下,老師也是無辜的吧,不想打擊她啦,於是我們選擇默默地上課吧,默默祈禱這周安靜的快點成為記憶拉。

          不論因為什么原因,學習的每一天是不能落下的,於是自己看啦一下正則表達式,其實則表達式是用來進行文本處理的技術,是語言無關的,在幾乎所有語言中都有實現。javascript中還會用到,一個正則表達式就是由普通字符以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。就像通配符“*.jpg”、“%ab%”,它是對字符串進行匹配的特殊字符串,正則表達式能做什么那?其實正則表達式就是對字符串的處理,可以用來對字符串的匹配、字符串的提取、字符串的替換等;我們在項目中像做到采集器、敏感詞過濾、URLRewite、Validator也可以使用正則表達式。下面就簡單的總結一下吧。

          一.元字符

                . :匹配除\n之外的任何單個字符。例如正則表達式“b.g”能匹配如下字符串:“big”、“bug”、“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”。 
          [ ] :匹配括號中的任何一個字符。例如正則表達式“b[aui]g”匹配bug、big和bag,但是不匹配beg、baug。可以在括號中使用連字符“-”來指定字符的區間來簡化表示,例如正則表達式[0-9]可以匹配任何數字字符,這樣正則表達式“a[0-9]c”等價於“a[0123456789]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;還可以制定多個區間,例如“[A-Za-z]”可以匹配任何大小寫字母,“[A-Za-z0-9]”可以匹配任何的大小寫字母或者數字。。
          | :將兩個匹配條件進行邏輯“或”運算。‘z|food’能匹配“z”或“food”。‘(z|f)ood’則匹配“zood”或“food”。 //注意^$問題。
          ( ) :將 () 之間括起來的表達式定義為“組”(group),並且將匹配這個表達式的字符保存到一個臨時區域,這個元字符在字符串提取的時候非常有用。把一些字符表示為一個整體。改變優先級、定義提取組兩個作用。
               
               二.元字符(限定符)
         *:匹配0至多個在它之前的子表達式,和通配符*沒關系。例如正則表達式“zo*”(等同於z(o)*)能匹配“z”、“zo”以及“zoo”;因此“.*”意味着能夠匹配任意字符串。"z(b|c)*"→zb、zbc、zcb、zccc、zbbbccc。"z(ab)*"能匹配z、zab、zabab(用括號改變優先級)。
         + :匹配前面的子表達式一次或多次,和*對比(0到多次)。例如正則表達式9+匹配9、99、999等。“zo+”能匹配“zo”以及“zoo”,不能匹配"z"。
         ? :匹配前面的子表達式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。一般用來匹配“可選部分”。(終止貪婪模式)
        {n} :匹配確定的 n 次。“zo{2}”→zoo。例如,“e{2}”不能匹配“bed”中的“e”,但是能匹配“seed”中的兩個“e”。 //seeeed,不可以。
        {n,} :至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配 “seeeeeeeed”中的所有“e”。
        {n,m} :最少匹配 n 次且最多匹配 m 次。“e{1,3}”將匹配“seeeeeeeed”中的前三個“e”。 {2,5}//bed,seed,seeed;beeeeed錯誤。
             ^(shift+6) :匹配一行的開始。例如正則表達式“^regex”能夠匹配字符串“regex我會用”的開始,但是不能匹配“我會用regex”。^另外一種意思:非!([^0-9])
        $ :匹配行結束符。例如正則表達式“浮雲$” 能夠匹配字符串“一切都是浮雲”的末尾,但是不能匹配字符串“浮雲呀”    
  
        下面就簡單的總結一下目前我們初步學習常用的正則表達式:
匹配中文字符的正則表達式: [\u4e00-\u9fa5]

匹配雙字節字符(包括漢字在內):[^\x00-\xff]

應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

匹配空行的正則表達式:\n[\s| ]*\r

匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正則表達式:(^\s*)|(\s*$)
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配網址URL的正則表達式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?       
            //bool r = Regex.IsMatch("bug", "^b.g$");
            //Console.WriteLine(r);

            //練習1:判斷是否是合法的郵政編碼(6位數字)
            //bool r = Regex.IsMatch("100010", @"^\d{6}$");
            //Console.WriteLine(r);

            //判斷一個字符串是不是身份證號碼,即是否是15或18位數字。
            //string s = "123456789012345678";
            //bool r = Regex.IsMatch(s, @"^\d{15}$|^\d{17}[0-9A-Za-z]$");
            //Console.WriteLine(r);

            //判斷字符串是否為正確的國內電話號碼,不考慮分機。
            //bool r = Regex.IsMatch("010-12345679544",@"^(\d{3,4}\-?\d{7,8}|\d{5})$");
            //Console.WriteLine(r);

            //判斷一個字符串是否是合法的Email地址。一個Email地址的特征就是以一個字符序列開始,后邊跟着“@”符號,后邊又是一個字符序列,后邊跟着符號“.”,最后是字符序列

            //bool r = Regex.IsMatch("123@163.com", @"^\w+@\w+\.\w+(\.\w+)?$");
            //Console.WriteLine(r);
            Console.Read();

 

       好啦,就寫到這里吧,感覺還有好多是不太清楚的啦,看起來就是一堆符號和英文字母,可是實現的功能非同小可啦,嘿嘿,這個還是要熟練的練習啦,剛開始接觸感覺真的不好玩,一點都不熟悉,還是要做好多的練習的啦,嘿嘿,我會找些習題在做一下練習的啦,一定要熟練的使用的啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM