zoukankan      html  css  js  c++  java
  • C#学习记录5——正则表达式 Regular Expression

    正则表达式,使用一个字符串来匹配符合一定标准的一系列字符串。非常利于检查字符串的格式,例如,注册登录时对信息格式的检查。

    C#的正则表达式在命名空间System.Text.RegularExpressions下

    例1.

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Text.RegularExpressions;
     7 namespace RegexTest
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             var str1 = "one, two; three  four";
    14             Regex reg = new Regex(",|;| ");
    15             foreach (string str in reg.Split(str1))
    16             {
    17                 if(str.Length != 0)
    18                     Console.WriteLine(str);
    19                 }
    20             Console.ReadKey();
    21         }
    22     }
    23 }

    第六行,使用对应的命名空间
    14行,创建了Regex的实例,括号里面的内容表示:单个逗号或单个分号或单个空格

    15行foreach中,reg.Split(str1)表示通过调用reg实例的split方法,将str1按照正则表达式的形式分割

    得到结果

    one

    two

    three

    four

    例2

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Text.RegularExpressions;
     7 namespace RegexTest
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             var str1 = "text, test tux tax.";
    14             Regex reg = new Regex(@"(t\S+t)(\s|,\s|;\s|.)");
    15             MatchCollection coll1 = reg.Matches(str1);
    16             foreach (Match match in coll1)
    17             {
    18                 if (match.Length != 0)
    19                     Console.WriteLine(match.ToString());
    20             }
    21             Console.WriteLine();
    22             Regex reg2 = new Regex(@"(t\S+x)(\s|,\s|;\s|.)");
    23             MatchCollection coll2 = reg2.Matches(str1);
    24             foreach (Match match in coll2)
    25             {
    26                 if(match.Length != 0)
    27                     Console.WriteLine(match.ToString());
    28             }
    29             Console.ReadKey();
    30         }
    31     }
    32 }

    使用match进行匹配

    14行的意义是,匹配以t开始,中间有一个或多个非空字符(\S(大写)表示任意非空字符,+表示一个或多个),后跟t,最后加上空格(\s(小写)),或逗号和空格,或分号和空格,或dot符。 同样的22行,只是改为了后跟x

    这里引号前的@符号,指的是不对引号内的内容进行转义,因此不需要在每个\s \S等之前再加一个\了。

    15行 MatchCollection coll1 = reg.Matches(str1);

    等号右侧返回了str1里符合正则表达式的匹配集合,赋值给matchcoll类型的coll1

    结果

    text,

    test

    text

    tux

    tax.

    注意,tt没有出现在第一次匹配集合中,因为\S+表示至少有一个非空字符

    3.匹配邮箱

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Text.RegularExpressions;
     7 namespace RegexTest
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             var str1 = "username_others@tju.edu.cn user2@yahoo.com Mr.user@163.com";
    14             Regex reg = new Regex(@"\w+([.,+-]\w+)*@\w+(\.\w+)*");
    15             MatchCollection coll1 = reg.Matches(str1);
    16             foreach (Match match in coll1)
    17             {
    18                 if (match.Length != 0)
    19                     Console.WriteLine(match.ToString());
    20             }
    21             Console.ReadKey();
    22         }
    23     }
    24 }

    解释第14行中的一些标记:

    \:将下一个字符标记为特殊字符或字面值。
    * :匹配前一个字符零次或几次。
    + :匹配前一个字符一次或多次。
    [a-z] :表示某个范围内的字符。与指定区间内的任何字符匹配。
    \w :与任何单词字符匹配,包括下划线。

    结果:

    username_others@tju.edu.cn

    user2@yahoo.com

    Mr.user@163.com

    4.匹配ip地址

    ip地址的每一部分都是0-255

    所以

    Regex reg = new Regex(@"((2[0-4]\d|25[0-5]|[01]?\d?\d)\.){3}(2[0-4]\d|25[0-5]|[01]?\d?\d)");

    2[0-4]\d: 200-249

    25[0-5]: 250-255

    [01]?\d?\d: 0-199    其中?表示有零个或一个

  • 相关阅读:
    Android(java)学习笔记15:匿名内部类实现多线程
    Android(java)学习笔记14:Java线程池
    Android(java)学习笔记13:线程组的概述和使用
    Android(java)学习笔记12:线程的状态转换图以及常见执行情况
    win2012R2打Windows8.1-KB2919355 问题
    win2012R2打Windows8.1-KB2919355 问题
    P2404
    P2404
    P2404
    抽签
  • 原文地址:https://www.cnblogs.com/sywang/p/4439219.html
Copyright © 2011-2022 走看看