自由学习正则表达式

               嘿嘿,今天家又停电啦,就来写总结晚啦,只得等到现在啦,其实我们今天学习的是什么我已经不记得啦,由于这周给我们讲.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();

 

       好啦,就写到这里吧,感觉还有好多是不太清楚的啦,看起来就是一堆符号和英文字母,可是实现的功能非同小可啦,嘿嘿,这个还是要熟练的练习啦,刚开始接触感觉真的不好玩,一点都不熟悉,还是要做好多的练习的啦,嘿嘿,我会找些习题在做一下练习的啦,一定要熟练的使用的啦。

posted @ 2014-12-17 00:39  雪?  阅读(1263)  评论(11编辑  收藏  举报