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    其中?表示有零个或一个

posted on 2015-04-19 15:25  DennisWong  阅读(291)  评论(0编辑  收藏  举报