正则表达式,使用一个字符串来匹配符合一定标准的一系列字符串。非常利于检查字符串的格式,例如,注册登录时对信息格式的检查。
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 其中?表示有零个或一个