A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马谦 中级黑马   /  2013-10-29 13:47  /  1139 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /// <summary>
  2.                 /// 正则表达式匹配
  3.                 /// </summary>
  4.                 /// <param name="input">源字符串</param>
  5.                 /// <param name="strregex">正则表达式</param>
  6.                 /// <returns>返回匹配结果</returns>
  7.                  List<string[]> Regex(string input,string strregex)
  8.                  {
  9.                          Regex regex = new Regex(strregex);
  10.                          Match match = regex.Match(input);
  11.                          int i = 0;
  12.                          List<string[]> list = new List<string[]>();
  13.                          while (match.Success)
  14.                          {
  15.                                  //匹配成功
  16.                                  if (match.Groups[0].Value.Trim() != "")//如果不为空
  17.                                  {
  18.                                          string[] it = { "", "", "" };
  19.                                          it[0] = match.Groups[0].Value;
  20.                                          it[1] = match.Groups[0].Index.ToString();
  21.                                          it[2] = match.Groups[0].Length.ToString();
  22.                                          list.Add(it);
  23.                                          i++;
  24.                                  }
  25.                                  match = match.NextMatch();//从上一个匹配结束的位置开始下一个匹配
  26.                          }
  27.                          return list;
  28.                  }
复制代码

1 个回复

倒序浏览
这是一哥们发给我的正则表达式的笔记,很好,我也拿来分享下了


1.正则表达式的作用:用于文字字符的格式匹配、查找和替换

2.正则表达式使用最多的类:Regex

3.正则表达式的最常见的基础语法有:字符匹配、重复匹配、转义语法
    字符匹配:
\d  匹配数字(0~9) eg."\d"匹配数字8,不匹配数字12和字母c


\D 匹配非数字            eg."\D"匹配字母C,不匹配数字8


\w 匹配包括下划线在内的任何字字符        eg."\w\w"匹配A3,不匹配@


\W匹配非字字符         eg.“\w”匹配@,不匹配A


\s 匹配任何空白,包括空格。制表换页等


\S匹配非空白字符       eg."\S\S\S"匹配A#4


[…]匹配括号中的任意字符  eg.[b-d]匹配b、c、d,不匹配e


[^…]匹配非括号字符       eg.[^b-d]匹配e,不匹配b-d的字符


      重复匹配:
{n} 匹配n次字符                eg"\d{3}"匹配\d\d\d,不匹配\d、\d\d


{n,}匹配n次和n次以上       eg"\w{2,}"匹配\w\w、\w\w\w,不匹配\w


{n,m}匹配n次以上m次以下 eg"\S{1,3}"匹配\S、\S\S、\S\S\S 不匹配\S\S\S\S


? 匹配0才或1次                   eg"5?"匹配5或0


+匹配1次或多次                  eg"\S+"匹配一个以上的\S


*匹配0次以上                      eg"\w*"匹配0次以上的\w


       转义匹配:
\+实际字符(\ . * + - ? / { } ¥等):表示实际字符      eg“\.”表示.       “\+”表示+


\f匹配换页字符


\n匹配换行字符


\r匹配回车符字符



4.构造正则表达式的方法:涉及到Regex类,在Regex类中包括的方法有:IsMatch、Replace、Split
  (1) IsMatch()方法:放回一个bool值的方法,若测试字符满足正则表达式则返回True,否则False
eg1:判断是否为成都的电话号码
string Regextext = @"028\d{8}"; //判断是否为成都号码的表达式,此处有\,不是转义符的意思,所以前边加一个@表示不转义
            string TestPhone1 = "02111111111";
            string TestPhone2 = "02822222222";
if (Regex.IsMatch(TestPhone1, Regextext) == true) //IsMatch是静态方法,可以直接通过类名.方法名调用
            {
                Console.WriteLine("{0}是成都的电话", TestPhone1);
            }
            else
            {
                Console.WriteLine("{0}不是成都的电话", TestPhone1);
            }
            if (Regex.IsMatch(TestPhone2, Regextext) == true)
            {
                Console.WriteLine("{0}是成都的电话", TestPhone2);
            }
            else
            {
                Console.WriteLine("{0}不是成都的电话", TestPhone2);
            }
            Console.ReadKey();
复制代码
匹配是否为身份证号(此处默认18位纯数字)
Console.WriteLine("请输入您的身份证号");
            string id = Console.ReadLine();
           string RegexTest = @"^\d{18}$";

//"\d{18}"当你输入19位身份证号的时候也会显示输入合法,而^…$是表示精确匹配,此处表示18位精确匹配。
            if (Regex.IsMatch(id, RegexTest) == true)
            {
                Console.WriteLine("您输入的身份证号合法");
            }
            else
            {
                Console.WriteLine("身份证号格式错误");
            }
(2)Replace()方法:一种替换方法eg2:在发布带有公开电子地址的文章时,将"AT"替换@,避免产生垃圾文件
Console.WriteLine("请您输入一个电子邮箱");
            string email = Console.ReadLine();
            string RegexTest = @"\w{1,}@\w{1,}\.\w{1,3}"; //邮箱匹配格式
            if (Regex.IsMatch(email, RegexTest) == true)
            {
                Console.WriteLine("邮箱合法");
                string ReplaceEmail = Regex.Replace(email, "@", "AT"); //用"AT"替换合法邮箱中的@
                Console.WriteLine(ReplaceEmail);
            }
            else
            {
                Console.WriteLine("邮箱格式不合法");
            }
            Console.ReadKey();


(3)Split()方法;拆分的方法,根据匹配正则表达式进行拆分存储在字符串数组中eg3:从群发邮件地址中读取所有邮件地址
string RegexTest = ";"; //群发邮件中取;作为分隔符
            string groupmail = "aa@qq.com;bb@qq.com;cc@qq.com";
            string[] personal = Regex.Split(groupmail, RegexTest);

            //进行分割字符串,并把分割后的结果存在personal中
            foreach (string str in personal) //输出personal数组中的每个字符串
            {
                Console.WriteLine(str.ToString());
            }
            Console.ReadKey();
5.构造Regex对象的构造函数有两个重载:一个是不含参数的构造Regex(string Pattern),另一个是有参数的构造Regex(string Pattern,RegexOptions).而RegexOptions属于枚举类型,包括Ignore(忽略大小写)、None(默认)等值
eg:建立一个合法的ISBN验证格式(ISBN验证格式为:X-XXXXX-XXX-X)
string RegexTest = @"\d-\d{5}-\d{3}-\d{1}";
            Console.WriteLine("请输入一个ISBN");
            string ans = Console.ReadLine();

           //构造正则表达式的验证函数,参数为空
            Regex ISBNtest = new Regex(RegexTest, RegexOptions.None);

                     if (ISBNtest.IsMatch(ans) == true)//验证输入的ISBN号
            {
                Console.WriteLine("合法");
            }
            else
            {
                Console.WriteLine("不合法");
            }
            Console.ReadKey();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马