正则表达式
元字符
. 匹配任意单个字符
* 匹配前面内容出现0或多次
+ 一或多次
? 0或一次
[] 匹配[]中的字符出现一次[0-9] [a-z]
() 改变正则优先级 (zo)+ zo出现1或多次
| 或 z|food 匹配z或food (z|f)ood 匹配 zood或food
{n} 出现n次
{n,} 至少出现n次,最多不限
{n,m} 至少出现n次,最多出现m次
^ 以谁开头 取反
$ 以谁结尾
•\d:代表一个数字,等同于[0-9]
•\D:代表非数字,等同于[^0-9]
•\s:代表换行符、Tab制表符等空白字符
•\S:代表非空白字符
•\w:匹配字母或数字或下划线或汉字,即能组成单词的字符
•\W:非\w ,等同于[^\w]
d:digital;s:space、w:word。大写就是“非”
给分组命名用?<>
贪婪的要在+后面加?就是非贪婪了
RegexOptions是枚举类型,里面可以选择忽略大小写,单行模式,多行模式。。。
Regex
Regex regex = new Regex("这里写正则",RegexOptions.IgnoreCase); Match match = regex.Match("要比配的字符串"); if (match.Success) { Console.WriteLine(match.Value); }
分组匹配
Match match = Regex.Match("内容", @"正则", RegexOptions.Singleline); if (match.Success) { Console.WriteLine(match.Groups[0]); Console.WriteLine(match.Groups[1]); }
我们可以用正则把网页的图片抓取过来,自己做个图片采集器
View Code
string url = "http://image.baidu.com/i?tn=list&word=liulan#%E7%BE%8E%E5%A5%B3|%E5%85%A8%E9%83%A8|0"; string reg=@"thumbURL"":""(?<src>.+?)"""; WebClient wc = new WebClient(); string content=null; using (Stream stream = wc.OpenRead(url)) { using (StreamReader sr = new StreamReader(stream, Encoding.UTF8)) { string line; while ((line = sr.ReadLine())!=null) { content+=line; } } } MatchCollection matchs = Regex.Matches(content, reg); foreach (Match match in matchs) { if (match.Success) { url = match.Groups["src"].Value; string a = Path.GetFileName(url); wc.DownloadFile(url, "d:\\Image" + a); } }