正则表达式01

介绍:正则表达式的基本语法和一些简单的使用方法,通过正则表达式来进行一些邮箱等的提取。

一:正则表达式语法介绍

定义:是一种用于匹配,提取,替换用的包含元字符的字符串。它是一门用来进行文本处理的技术,与语言无关。其实正则表达式其实是一个模版,将某个字符模式与所搜索的字符串进行匹配。

*: 元字符

. :匹配除\n之外的任何单个字符。<一个.只能匹配一个字符>

     a.b 代表acb,adb等。

[]:匹配括号中的任何一个字符<范围,数字集合>

     a[1-9]b代表a1b,a5b等。

| :表示或的意思

() :改变优先级和分组    

*: 限定符

{n}:表示前面的表达式必须出现n次

   A[abcd]{3}b:表示[abcd]可以出现3次。

{n,}:表示前面的表达式至少出现n次,最多不限。

{n,m}:表示至少出现n次,最多出现m次。

*:表示出现0次或者多次。

+:表示出现1次或多次。

?:表示0次或1次,或这个可以和限定符在一起使用,去除贪婪模式。

*: 元字符

^:表示正则表达式的开始,还有一个意思是取非

   ^ab:匹配字符串必须以ab开头。

   A[^0-9]b:表示ab之间除了0-9之外的所有字符都行。

$:表示正则表达式的结束      

  cc$:匹配字符串必须以cc结尾。

wps8722.tmp

*:转义字符

在C#中使用@来区分转义字符,正则表达式中调用方法来区别转义字符,(忽略所有的元字符,类似于C#中的@),也可以在书写正则表达式的时候使用双写的形式,比如:\\表示一个\;””””四个双引号表示两个双引号等。

String s=Regex.Escape(@”\d{5,7}”);

二:贪婪模式与非贪婪模式

贪婪模式与非贪婪模式发生的条件:在表达式后面加入限定符时,按可能多的匹配。

  贪婪:.+(默认为贪婪模式,尽可能的多匹配)

  非贪婪:.+?(尽可能少的匹配)

这里的贪婪模式和非贪婪模式就是说为了使我们匹配字符串的时候尽可能的按照我们想匹配的方式进行匹配。

三:实例

IsMatch():表示只要整个字符串中有任何一部分可以匹配,则该表达式放回true.

eg1:

           while (true)
            {
                Console.WriteLine("请输入:");
                string write = Console.ReadLine();
                //这里的IsMatch是部分匹配,
                bool b = Regex.IsMatch(write, "[0-9]{6}");
                Console.WriteLine(b);                
                Console.ReadKey();
            }

 

eg2:要求用户输入一个整数,匹配是否为>=10或者<=20的数组。

            while (true)
            {
                Console.WriteLine("qingshur:");
                string msg = Console.ReadLine();
                bool b = Regex.IsMatch(msg,"^(1[0-9]|20)$");
                Console.WriteLine(b);
            }

eg3:判断一个字符串是不是身份证号码。1:长度为15位或者18位字符串,且首位不能为0;2:若为15则全部都是数字;3:若为18位,则前17位为数字,末位可能为数字,也可能为X;

            while (true)
            {
                Console.WriteLine("请输入你的身份证号码。");
                string msg = Console.ReadLine();
                bool b = Regex.IsMatch(msg,@"^([1-9][0-9]{14}|[1-9][0-9]{16}[0-9xX])$");
                Console.WriteLine(b);                
            }

eg4:利用正则表达式来判断电话号码

            while (true)
            {
                console.writeline("请输入您电话号码?");
                string msg = console.readline();
                bool n = regex.ismatch(msg, "^([0-9]{3,4}-?[0-9]{7,8}|[0,9]{5})$");
                console.writeline(n);
            }

eg5:邮箱的匹配

^[0-9a-zA-Z_.\-]+@[a-zA-Z\-0-9]+(\.[a-zA-Z]+){1,2}$

eg6:Ip地址的匹配

^[0-9]{3}\.[0-9]{3}\.[0-9]{3}\.[0-9]{3}$

eg7:日期的匹配

^[0-9]{4}\-(0[0-9]|1[0-2])?\-(0[0-9]|1[0-2])?$

eg8:贪婪模式01

            string msg = "111.1111.11.11";
            //贪婪模式 多的匹配  (默认)
            Match n = Regex.Match(msg,".+");
            //非贪婪模式   少的匹配(限定符后面加?,禁止贪婪模式)
            Match n = Regex.Match(msg, ".+?");
            Console.WriteLine(n.Value);
            Console.ReadKey();      

eg9:贪婪模式02

            string msg = "111。1111。11。11。";
            //贪婪匹配,显示全部。 前面的进行全部匹配,。让前面的全部匹配吐出来一个句号,让后面的额句号了匹配。
            Match n = Regex.Match(msg,".+。");    
            //禁止贪婪模式 显示前四位。
            Match n = Regex.Match(msg,".+?。");    
            Console.WriteLine(n.Value);
            Console.ReadKey();

eg10:通过WebClient和正则表达式来获取网页中的邮箱

           WebClient client = new WebClient();   //WebClient中封装了请求地址的类
             //下载网页内容
             string msg = client.DownloadString("http://blog.sina.com.cn/s/blog_515617e60101e151.html");
            MatchCollection matchCollection = Regex.Matches(msg,
@"[-a-zA-Z0-9_.]+@[a-zA-Z-0-9]+(\.[a-zA-Z]+){1,2}");
            foreach (Match item in matchCollection)
            {
                Console.WriteLine(item.Value);
            }
            Console.WriteLine("{0}个邮箱", matchCollection.Count);
            Console.ReadKey();
image

附件:

正则表达式参考:   http://www.cnblogs.com/jamesping/articles/2252675.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2015-11-29 14:41  —阿辉  阅读(1297)  评论(1编辑  收藏  举报