C#正则表达式
刚接触正则表达式时可能会觉得很晕乎.其实它的作用是很简单的,只不过实现的细节方面有些复杂.正则表达式是用来解析字符串的.而解析字符串不外乎是达到下面几种目的
1.验证某一长串字符串中是否有符合某个条件的子字符串
2.从长字符串中提取符合某个条件的子字符串
3.把符合条件的子字符串替换成另外的字符串
4.把一个字符串分割成几个小字符串
正则表达式的复杂主要是体现在怎么指定那个"条件".其实实现上面说的4个目的大部分时候用string类的一些函数也照样能实现.只不过有时太复杂了点
下面举几个简单的例子说下怎么实现上面的4个目的.使用正则表达式时要引用命名空间using System.Text.RegularExpressions;
1.验证字符
假如有字符串string str = "I am arwen";我们想验证下这个字符串里是否包含字符"wen".
用正则表达式: bool exist = Regex.IsMatch(str, "wen");
用string类的函数:bool exist = str.Contains("wen");
2.提取字符
用正则表达式:string subStr = Regex.Match(str, @"w{3}\..*\.com").Value;
用string类的函数:
int start = str.IndexOf("w");
int end = str.IndexOf("m");
string subStr = str.Substring(start, end - start + 1);
随着问题的复杂我们发现string类的函数就有点力不 从心了.假如是随便给一段未知的字符串,然后要求提取出一个网址来.用string类函数实现起来很复杂而且容易出错
而用上面那句简单的正则表达式就能正确的提取.
3.替换字符
还是和上面类似的例子,假如随便给一段字符串,把里面的网址替换成www.linuxidc.net
用正则表达式.
string newStr = Regex.Replace(str, @"w{3}\..*\.com", "wwww.linuxidc.net");
这个用string的函数实现起来就更麻烦了啊.这里就不用它来实现了.反正思路就是要先搜索出字符串里的网址,再把它替换成www.linuxidc.net
4.分割字符
用正则表达式:
string[] strs = Regex.Split(str, @"[:/\.]");
用string类的函数
string[] strs = str.Split(new char[] { ':', '/', '.' });
在上面的例子中我们会看到@"w{3}\..*\.com" 和@"[:/\.]这样奇怪的字符串,我们一般把它们叫作模式(pattern),也就是说通过它来指明要符合某个条件.在正则表达式的应用中最难的地方就是怎么通过它们来指定条件.其中的符号都有特殊的含义