黑马程序员—正则表达式

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

  正则表达式是用来进行文本处理的技术,几乎所有的语言都可以实现。

正则表达式是由普通字符以及特殊字符(也叫元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。它是一个模板,将某个字符模式与所搜索的字符串进行匹配。所以,它是对字符串进行操作的。同时又有点像通配符(“*.jpg”),是对字符串进行匹配。正则表达式比较复杂,一般我们先掌握常用的正则表达式用法,以后用到其他的再进行查找就可以了。下面我们来详细看下。

元字符:

  元字符在正则表达式中是非常重要的,是它的基本组成元素。分为以下类型:

  .: .匹配除\n之外的任何单个字符。如:”b.g”能匹配出:big,b g等等,b和g中间可以是任意单个字符。

  []: 匹配括号中的任意一个字符。如:”b[abc]g”能匹配出:bag,bbg,bcg,注意它是匹配[]内的任意一个字符,所以babg等是匹配不到的。我们也可以再括号中使用连字符”-”来指定字符的区间来简化表示,如[0-9]可以匹配任意单个数字字符,等价于[0123456789];同时我们还可以指定多个区间,如[A-Za-z]可以匹配出任意大小写的字母;[A-Za-z0-9]可以匹配出任意一个大小写的字母或者数字。

  |: 将两个匹配条件进行逻辑“或”运算。如”g|food”能匹配出:g或者food;而(g|f)ood则匹配出:good或food。这里我们用到了(),接着会说到。

  (): 将()之间括起来的表达式定义为“组”,并将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的相当有用,它将一些字符表示为一个整体。具有改变优先级、定义提取组的作用。

  *匹配0或者多个在它之前的子表达式,不过它跟通配符的*没有关系。如正则表达式”ab*”能匹配出必须含有a(1或者多个),可以含有b(0或者多个)也可以含有其他字符的表达式,并且不分先后顺序,如a,ab,abbb,ababab,ba等;又如”a(b|c)*”能匹配出必须含有a(1或者多个),可以含有b(0或者多个)、c(0或者多个) 也可以含有其他字符的表达式,也不分先后;再如”a(bc)*”,其实跟”a(b|c)”是一样的;还如”abc*”,其实和”(ab)c”是一样的,必须包含ab(1或者多个),可以包含b(0或者多个) 也可以含有其他字符的表达式,ab的顺序要保持。

 +匹配1或者多次在它之前的子表达式,和*的区别就在于一个是1或者多次,一个是0或者多次。如”0+”,匹配出只要包含0的表达式;又如”01+”,匹配出只要包含01组合的表达式;再如”0(1|2)+”,匹配出只要包含01或者02组合的表达式。

 ?: 匹配0次或1次它之前的子表达式。如”a?”,这样严格是不正确的,因为它所有的表达式都认为匹配;又如”ab?”,匹配出只要含有a的表达式都可以。

 {n}: 匹配确定的n次。如:”a{2}”,能匹配出包含aa组合的表达式;又如”ab{2}”,能匹配出包含abb组合的表达式;再如”abc{2}”,能匹配出包含abcc的表达式;三如”a(bc){2}”,能匹配出abcbc组合的表达式;还如”a(b|c){2}”,能匹配出包含abb、abc、acc的表达式。

  {n,}表示至少匹配n次。如:”a{2,}”能匹配出包含两个及以上的连续a的表达式.

  {n,m}: 表示至少匹配n次且至多匹配m次。如:”a{2,5}”能匹配出只要是包含两个及以上的连续a的表达式,但是如果多于5个连续a,它是只认得前5个a。

  ^(即shift + 6): 匹配以什么什么开始。如:”^a”,匹配出任意以a为开头的表达式,如”a”、”abc”等。其中,^还有另外一个意思,即非(!)。如:”^a”,匹配出只要不是单个字符a的表达式;又如”[^0-9]”匹配出只要不是单纯数字的表达式。

  $表示以什么结尾。如:”a$”,匹配出任意以a为结尾的表达式。

说完元字符,我们来看看它们的其中一些简写表达式。

 简写表达式: 

  \d:代表一个数字,跟[0-9]是相同的;

  \D:代表非数字,跟[^0-9]是相同的;

  \s:代表换行符、Tab制表符等空白字符(空格、回车、制表符);

  \S:代表非空白字符

  \w:匹配字母、数字、下划线、汉字等,即能组成单词的字符,除%&#@!$等字符。

  \W:代表非\w

.Net中的正则表达式:

  正则表达式在.Net中就是用字符串表示的,只是该字符串比较特殊,但它在C#语言看来就是普通的字符串,具体意义会有Regex类内部进行语法分析。

  在C#中,要引用一个程序集,即using System.Text.RegularExpressions;一般会有以下方法:

Regex.IsMatch(字符串,正则表达式):可以判断是否匹配;如

            Console.WriteLine("输入一个字符串我们来判断是否是我们想要的! ");

            while (true)

            {

                string input = Console.ReadLine();

                if (Regex.IsMatch(input, @"a$"))

                {

                    Console.WriteLine("是的");

                }

                else

                {

                    Console.WriteLine("不是");

                } 

            }

 

Regex.Match(字符串,要提取字符串的正则表达式);只是该方法只能提取一次;如要提取全部,要用Regex. Matches方法;以下为事例:提取一个字符串里的数字

string str = "大家好,我叫帅哥,今年正值青春22岁,海拔177,压地球65";                       

            Regex reg = new Regex(@"\d+");

            MatchCollection m = reg.Match(str, 0);

 

            foreach (var item in m)

            {

                Console.WriteLine(item);

            }

 

            Console.ReadKey();

这里使用的Match方法,只会找到第一个数字,即22;如果想三个数字都找到,只需要把Match换成Matches即可!

我们正则表达先说到这,正则表达式入门不难,只要多用就可以熟练了。

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

转载于:https://www.cnblogs.com/saxys/archive/2013/04/27/3047343.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值