正则表达式 之 C#后台应用
正则表达式在.Net就是用字符串表示,这个字符串格式比较特殊,无论多么特殊,在C#语言看来都是普通的字符串,具体什么含义由Regex类内部进行语法分析。
Regex 类 存在于 System.Text.RegularExpressions 名称空间。
正则表达式可以进行字符串的匹配、字符串的提取、字符串的替换。
C#中分别对应正则表达式的三个重要方法。
1、 IsMatch() 返回值为bool类型:
格式:Regex.IsMatch("字符串", "正则表达式");
作用:判断字符串是否符合模板要求
例如:bool b =Regex.IsMatch("bbbbg","^b.*g$");判断字符串是否以b开头且以g结尾,中间可以有其他字符,若正确返回true,否则else。
2、 Match() 返回值为Match类型,只能匹配一个
Matches() 返回值为MatchCollection集合类型,匹配所有符合的
格式:Match match = Regex.Match("字符串", "正则表达式");
或MatchCollection matches= Regex. Matches ("字符串", "正则表达式");
作用:
①提取匹配的子字符串
②提取组。Groups的下标由1开始,0中存放match的value。
例如:
Match match = Regex.Match("age=30", @"^(.+)=(.+)$");
if (match.Success){
Console.WriteLine(match.Groups[] .Value);//输出匹配的子字符串
Console.WriteLine(match.Groups[] .Value);//获取第一个分组的内容
Console.WriteLine(match.Groups[] .Value);//获取第二个分组的内容
}
或
MatchCollection matches = Regex.Matches("2010年10月10日", @"\d+");
for (int i = ; i < matches.Count; i++)
{
Console.WriteLine(matches[i].Value);
}
3、 Replace() 返回值为string
//将所有的空格替换为单个空格
string str = " aa afds fds f ";
str = Regex.Replace(str, @"\s+", " ");
Console.WriteLine(str); string str = "hello“welcome to ”beautiful “China”";
//hello"welcome to "beautiful "China"
//$1表示引用第一组。$2表示用第二组。
string strresult = Regex.Replace(str, "“(.+?)”", "\"$1\"");
Console.WriteLine(strresult);
常用情况:
1、贪婪模式与终结贪婪模式
string str = "1。 11。 111。 111。 ";
//".+"表示匹配任意多个任意字符,会得到整个字符串
//又因为需要匹配"。 ",所以得到结果为"1。 11。 111。 111。 "
//贪婪模式
Match matchA = Regex.Match(str, "^.+。 $"); //"?"表示终极贪婪模式,匹配时会只取一个字符
//又因为需要匹配"。 ",所以得到结果为"1。 "
Match matchB = Regex.Match(str, "^.+?。 $");
如果发现结果与想象有差别,查看是否是贪婪模式造成的。
2、实际应用采集器(从某个网页上采集邮箱、图片或其他信息)、敏感词过滤、UBB翻译器。
[1]采集器
采集邮箱:
string url = "http://www.example.com";
//通过WebClient下载网页的源码
System.Net.WebClient client = new System.Net.WebClient();
client.Encoding = System.Text.Encoding.UTF8;
string strHtml = client.DownloadString(url);
//匹配邮箱
MatchCollection collection = Regex.Matches(strHtml, @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
for (int i = ; i < collection.Count; i++)
{
Console.WriteLine(collection[i].Value);
}
保存图片:
string url = "https://www.example.com/";
//通过WebClient下载网页的源码
System.Net.WebClient client = new System.Net.WebClient();
client.Encoding = System.Text.Encoding.UTF8;
string strHtml = client.DownloadString(url);
//假设需要匹配的字符串格式都为:<img alt="" src="img/example.jpeg" />
//\s是为了针对写完<img回车的情况:<img\n alt="" src="img/example.jpeg" />
MatchCollection collection = Regex.Matches(strHtml, "<img\\s*.*src=\"(.+?)\".*/>");
for (int i = ; i < collection.Count; i++)
{
string img = collection[i].Groups[].Value.Replace("\"",string.Empty);
client.DownloadFile(img, @"D:\Images\"+ Path.GetFileName(img));
Console.WriteLine(collection[i].Value);
}
网址处理:
//把"http://www.example.com/"替换为
//<a href="http://www.example.com/">http://www.example.com/</a>
string url = "http://www.example.com/";
url = Regex.Replace(url, @"(http://[a-zA-Z0-9_\-\?=\.&]+)", "<a href=\"$1\">$1</a>");
[2]敏感词过滤:

[3]UBB翻译:

正则表达式 之 C#后台应用的更多相关文章
- c#正则获取html里面a标签href的值
获取单个a中href的值: string str = "<a href=\"http://www.itsve.com\">下载</a>" ...
- cms系统视频分享
cms_001-CMS系统功能需求简介-1.avicms_002-如何采用用例分析方法来理解需求-1.avicms_003-后台管理系统用例-1.avicms_004-实现验证码的初步思路-1.avi ...
- opencart 3.0 版本数据库数据表字典(详细篇)
1.下文是opencart3.0版本数据库数据表字典,表字段与功能的介绍都比较详细. 数据表 address :地址表,会员在结账时储存的账单地址或者配送地址(这个与区域配送方 ...
- ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证
ASP.NET开发中主要的字符验证方法-JS验证.正则表达式.验证控件.后台验证 2012年03月19日 星期一 下午 8:53 在ASP.NET开发中主要的验证方法收藏 <1>使用JS验 ...
- 关于通用的C#后台获取前台页面的标签的正则表达式
Regex reg = new Regex("<div[^>]*?class=\"类属性名称\"[^>]*>(.*?) </div> ...
- cshtml中正则表达式使用后台代码
//定义变量 bool a = false; //正则表达式 string b = @" ^ (13[0 - 9] | 14[5 | 7] | 15[0 | 1 | 2 | 3 | 5 | ...
- 常用的正则表达式@java后台
package Regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @作者 Goofy * @邮件 ...
- C#后台利用正则表达式查找匹配字符
/// <summary> /// 发送短信 系统固化短信 /// </summary> /// <param name=&qu ...
- asp.net后台正则表达式验证手机号码邮箱
//如果文本中可以为空的为NO,文本中内容不为空 if (input.nullable == "no" || !isnull(input.value)) { //文本中值的类型 s ...
随机推荐
- IE下设置unselectable与onselectstart属性的bug,Firefox与Chrome下的解决方案
在IE下给DIV设置unselectable与onselectstart属性,可以让div的内容不能选中,这个功能在很多情况下,非常有用,但是他的bug太明显, 直接使用一个DIV是可以的,比如: & ...
- class属性添加多个类
<html> <head> <style type="text/css"> h1.intro { color:blue; text-align: ...
- MyEclipse的Hibernate Reverse Engineering失败解决方法
当使用MyEclipse的Hibernate逆向工程功能时,有时出现不成功的情况,点击finish按钮后对应的源文件目录没有生产相关对象,这时应该如何解决呢? 在国内的网站找了很久没找到,最后在国外的 ...
- [NOIP2013]转圈游戏
题目描述 Description n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 ...
- bzoj 1835 [ZJOI2010]base 基站选址(DP+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1835 [题意] 有n个村庄,每个村庄位于d[i],要求建立不多于k个基站,在第i个村庄 ...
- 菜鸟学习HTML5+CSS3(一)
主要内容: 1.新的文档类型声明(DTD) 2.新增的HTML5标签 3.删除的HTML标签 4.重新定义的HTML标签 一.新的文档类型声明(DTD) HTML 5的DTD声明为:<!d ...
- Java持久化存储对象Properties的方法list、store、load
package FileDemo; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStrea ...
- 转载C#函数式程序设计初探——基础理论篇
转载网址:http://www.cnblogs.com/Hlia/archive/2013/04/20/3029701.html 个人认为,C#语言的某些设计并不非常适合函数式开发,比如它的类型推断并 ...
- RC522 射频读卡器模块(MINI型)
一.硬件: 二.[主芯片介绍] MF RC522是应用于13.56MHz非接触式通信中高集成度的读写卡芯片,是NXP公司针对"三表"应用推出的一款低电压.低成本.体积小的非接触式读 ...
- MSSQLSERVER数据库- 数据类型Timestamp
Timestamp:亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器.当它所定义的列在更新或者插入数据行时,此列的值会被自动更新,一个计数值将 ...