正则表达式在.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#后台应用的更多相关文章

  1. c#正则获取html里面a标签href的值

    获取单个a中href的值: string str = "<a href=\"http://www.itsve.com\">下载</a>" ...

  2. cms系统视频分享

    cms_001-CMS系统功能需求简介-1.avicms_002-如何采用用例分析方法来理解需求-1.avicms_003-后台管理系统用例-1.avicms_004-实现验证码的初步思路-1.avi ...

  3. opencart 3.0 版本数据库数据表字典(详细篇)

    1.下文是opencart3.0版本数据库数据表字典,表字段与功能的介绍都比较详细.             数据表 address :地址表,会员在结账时储存的账单地址或者配送地址(这个与区域配送方 ...

  4. ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证

    ASP.NET开发中主要的字符验证方法-JS验证.正则表达式.验证控件.后台验证 2012年03月19日 星期一 下午 8:53 在ASP.NET开发中主要的验证方法收藏 <1>使用JS验 ...

  5. 关于通用的C#后台获取前台页面的标签的正则表达式

    Regex   reg = new Regex("<div[^>]*?class=\"类属性名称\"[^>]*>(.*?) </div> ...

  6. cshtml中正则表达式使用后台代码

    //定义变量 bool a = false; //正则表达式 string b = @" ^ (13[0 - 9] | 14[5 | 7] | 15[0 | 1 | 2 | 3 | 5 | ...

  7. 常用的正则表达式@java后台

    package Regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @作者 Goofy * @邮件 ...

  8. C#后台利用正则表达式查找匹配字符

    /// <summary>        /// 发送短信 系统固化短信        /// </summary>        /// <param name=&qu ...

  9. asp.net后台正则表达式验证手机号码邮箱

    //如果文本中可以为空的为NO,文本中内容不为空 if (input.nullable == "no" || !isnull(input.value)) { //文本中值的类型 s ...

随机推荐

  1. Spring AOP--基于XML文件的配置

    Spring AOP的配置可以基于注解,也可以基于XML文件.前面几篇都是使用注解的方式.下面介绍下使用XML文件如何配置 使用的测试类和切面类都类似.只需要属于AOP的注解去掉即可.下面是AOP的X ...

  2. 编程精粹:编写高质量的C语言代码———笔记一

    第一章 假想的编译程序 要记得对空语句进行处理,最好使用NULL使其明显可见 char * strcpy(char* pchTo, char* pchFrom) { char* pchStart = ...

  3. delphi获得当前鼠标坐标

    简单的说就是取鼠标所在位置对应的窗口句柄? procedure TForm1.Timer1Timer(Sender: TObject);vara:TPoint; //用来存放坐标hw:HWND; // ...

  4. [原创]使用命令行工具提升cocos2d-x开发效率(二)之CocosBuilder篇

    如果你正在使用CocosBuilder或者是其他基于CocosBuilder源码改装而成的工具为你的游戏搭建场景或者UI,那你一定要看看这篇文章:)   你是否已经厌倦了无聊的手工publish操作? ...

  5. 第一章 :绪论-Twitter数据的收集和处理

    为什么要用twitter,我心里是一万头CNM在飞奔.这个国外的东西很不好访问到的,国内的政策,你懂的,不说这个了,还是想办法翻出去再说吧. 不知道别人都用的什么工具,看到太多的注册就头大,就选了一个 ...

  6. mybatis系列-02-mybatis框架

    2.1     mybatis是什么 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...

  7. MapReduce计算模型

    MapReduce计算模型 MapReduce两个重要角色:JobTracker和TaskTracker. ​ MapReduce Job 每个任务初始化一个Job,没个Job划分为两个阶段:Map和 ...

  8. Thinking in Java

    今天无意中看到了这本书(Thinking in Java)的中关于多态的一段描述,瞬间就感觉到了多态原来是这样的.

  9. HDU-4631 Sad Love Story 平面最近点对

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4631 数据是随机的,没有极端数据,所以可以分段考虑,最小值是一个单调不增的函数,然后每次分治算平面最近 ...

  10. HDU-4642 Fliping game 简单博弈

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4642 看右下角的状态就行了,因为上面的操作每次都会改变它,而最后的局势是根据它来的... //STAT ...