设为首页 加入收藏

TOP

C#实现正则表达式入门实战教程(一)
2018-03-28 09:05:54 】 浏览:328
Tags:实现 正则 表达式 入门 实战 教程

  如果有人和你说,如果不将字符串转换为数字,你要如何判断字符串是否由全数字组成?把字符串拆成char数组,然后放入一个循环,来判断每个char是否为数字?那你要如何判断手机号是否合法?IP是否合法呢?把字符串拆成char数组总不是个办法啊,是否有更好的解决办法?有的,正则表达式就是。正则表达式是什么?可以这么说,它是一种字符串语法,可以形容字符串的格式。本文就来介绍正则表达式,就像我在其他博客中讲过的,我不喜欢把所有规则列出来,规则在网上一搜一大把。我要讲的是正则表达式究竟能够做什么,怎么使用正则表达式。


  维基百科中,正则表达式的解释为:正则表达式(英语:Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。没错,正则表达式也是一个字符串,只不过这个字符串能够用来判断另一个字符串是否满足一定规则,如是否由全数字组成,是否是合法的手机号码,是否是合法的IP。只要掌握了正则表达式,你就相当于掌握了一种描述正则表达式的语法,当然这种语法不是用来和人交流的,而是和”机器“交流的,你只要打出^((\w)(\w)\1\2)+$机器就能告诉你一个字符串是否长成ababab...这样。下面我来讲解正则表达式。我不会列出所有语法,因为网上很多。


  我会以Lesson的形式,先介绍实例,然后详细分析实例,因为正则表达式的规则确实很难记,但是能达到的效果是很好记的,只要你看过有人实现了利用正则表达式来判断一个字符串是否由全数字组成,那么你就再也不会忘了,下次再有类似的要求的时候,你至少知道用正则表达式来做会很简单,那么剩下的就是翻出正则表达式的手册,研究一阵子,自然就出来了,因为虽然规则难记,但是很好理解。 


  该题的想法很简单,从”头“到”尾“,全是数字就可以了。打开手册,看到表示开头的字符是^,表示结尾的字符是$,表示数字的字符是\d,然后看到想要匹配多个字符,有两个选择,+和*,+是至少出现一次,*是0次或者多次,^\d+$。这就完成了!好,让我们来试一试。在c#中,正则表达式相关的类是System.Text.RegularExpressions.Regex,其中我用到的方法有Match,Replace,和IsMatch,分别是匹配,替换和判断是否匹配的便捷方法。用法也很简单,看下我的例子就会明白了。


internal static class RegexExtension
{//将匹配信息转换为字符串信息
    public static string Convert2String(this Match match, string enter)
    {
        StringBuilder builder = new StringBuilder();
        builder.AppendFormat("匹配的字符串为:{0}, 是否匹配成功{1}, 匹配到的字符串为{2}, 匹配的位置为{3}, 匹配的长度为{4},一共匹配到{5}个结果",
            enter, match.Success, match.Value, match.Index, match.Length, match.Groups.Count);
        return builder.ToString();
    }
}


public static void Lesson1(){
    Console.WriteLine("全数字的判断:");
    string[] enters = {"123123123", "123a123", "a123123", "", "0 "};
    foreach (var enter in enters){
        Console.WriteLine(
            Regex.Match(enter, @"^\d+$").Convert2String(enter));
    }
}


  Regex.Match方法会将enter与规则进行匹配,然后将结果转换为字符串,例子中只有 ”123123123“ 会匹配成功,其他都是失败,即使”0 “也会失败,是因为有空格,而\d只会匹配数字。是不是很简单?下面来看第二课。


   判断号码是否为固话或者手机号,固话是7-8位,手机为11位,这时就需要2种情况都可以匹配,先看固话,全是数字已经会了,是^\d+$ ,只要加上个数的限制就可以了,查看手册,发现{m,n} 描述有几个字符,m表示最少出现的次数,n表示最多出现的次数。那么 +字符就应该是和{1,} 一样,不填n表示不限制最大次数,那么m不填就表示不限制最小次数。然后是手机,手机为11位,且由1开头,且都为数字,那么就很简单了:^1\d{10}$。如何把他们拼起来?字符 | 可以办到,下面是代码。


public static void Lesson2(){
    Console.WriteLine("是否为合法的电话号码,电话号码的规则分两部分:");
    Console.WriteLine("固话为7-8位,手机为11位,且由1开头,且都为数字。");
    string landPhoneRule = @"^\d{7,8}$";
    string handPhoneRule = @"^1\d{10}$";
    //规则合并
    string rule = string.Format("{0}|{1}", landPhoneRule, handPhoneRule);
    string[] enters ={
        "1234567", //7位数字,合法
        "12345678", //8位数字,合法
        "13888888888", //11位以1开头的数字,合法
        "23888888888", //11位以2开头的数字,非法
        "0123456789", //10位数字,非法
      &n

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇从JavaScript的事件循环到Promise 下一篇Vuex初步认识

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目