`
jinvasshole
  • 浏览: 771308 次
文章分类
社区版块
存档分类
最新评论

C#正则表达式编程(二):Regex类用法

 
阅读更多

上一篇讲述了在C#中有关正则表达式的类之间的关系,以及它们的方法,这一篇主要是将Regex这个类的用法的,关于Match及MatchCollection类会在下一篇讲到。
对于正则表达式的应用,基本上可以分为验证、提取、分割和替换。仅仅利用Regex类就可以实现验证和简单替换。
利用Regex类实现验证
经历2009年的备案和DNS停止解析风波之后,大部分的带有反馈性的网站和论坛都对一些敏感词进行了过滤,包含有这类敏感词的文章要么内容被替换要么被禁止发表,利用Regex类就可以实现这个功能,下面是一个例子:

输出结果:字符串中包含有敏感词:孙权!
对于上面的例子,如果要检查的字符串中包含“孙权”这个关键词就会在控制台上输出提示,当然在实际的应用中可能是包含有被禁止的词语的内容不允许提交而不是仅仅提示了。不过这类情况仍有办法可以绕过,可以使用“孙-权”或“孙+权”来替换孙权从而来绕过验证。
对于中文字符串还比较好说,对于英文的字符串还要考虑每个字母的大小写情况了。比如我们禁止在内容中出现某个关键词(如太CCTV的CCTV,或者CCAV),难道我们要针对字符串中每个字母的大小写情况进行多种情况的组合验证?不,完全没有必要,下面就是一个例子:

输出结果:字符串中包含有敏感词:def!

在上面的例子中,实例化Regex时采用了两个带参数的构造函数,其中第二个参数就是上一篇中提到的RegexOptions枚举,RegexOptions.IgnoreCase表示匹配字符串的时候不管大小写是否一致。
此外,在Regex中存在着一些功能相同的静态方法和实例方法,如:IsMatch()方法,在第一个例子中我还写出了两种方法的实例,如下:

其实在.NET Framework中很多类都有这样类似的情况,在System.IO命名空间下还有File及FileInfo这样的静态类和非静态类的情况,其实它们提供了相似的功能,用小沈阳的话说“这是为什么呢”?有部分是出自效率的考虑,并且也有出自让代码编写方便和看起来简洁的因素。对于偶尔一半次为之的情况,建议使用静态方法,这样有可能会提高效率(因为采用静态方法调用的正则表达式会被内部缓存,默认情况下会缓存15个,可以通过设置Regex类的CacheSize属性来更改缓存个数),如果是要在循环中多次使用,那就采用实例方法吧。
使用Regex类进行替换
上面的处理仅仅是查看提交的内容中是否有被禁止的关键词,其实有时候还可以做到将被禁止的关键词进行替换,例如将上面用到的字符串中的任何形式的"ABC"替换成"|",下面就是一个例子:


输出结果:
原始字符串:刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操DEF许攸郭嘉需晃袁绍
替换后的字符串:刘备|关羽|张飞|赵云|诸葛亮|孙权|周瑜|鲁肃|曹操DEF许攸郭嘉需晃袁绍
实际上有时候我们遇到的情况可能不仅仅这么简单,例如有时候我们希望将字符串中的任何形式的“ABC”及“DEF”实现HTML形式的加粗,也就是替换成<b>abc</b>及<b>def</b>这种形式,当然还保持和原来一致的大小写形式,代码如下:


输出结果如下:
原始字符串:刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操DEF许攸郭嘉需晃袁绍
替换后的字符串:刘备<b>ABC</b>关羽<b>ABc</b>张飞<b>Abc</b>赵云<b>abc</b>诸葛亮<b>aBC</b>孙权<b>abC</b>周瑜<b>AbC</b>鲁肃<b>aBc</b>曹操<b>DEF</b>许攸郭嘉需晃袁绍
在上面的例子中,我们使用了MatchEvaluator委托,并且还涉及到了Match类(Match类将会在下一篇讲述),在MatchEvaluator委托中使用到的Match类表示了单个的正则表达式匹配,通过改变match实例中Value的值来达到完成替换的目的。
在本篇中仅仅是讲述了Regex类的一些简单用法,也没有讲述正则表达式的相关知识,不过即使如此也能减轻我们的一部分工作,学习和灵活运用正则表达式是一个长期积累的过程。

周公
2010-02-25

分享到:
评论

相关推荐

    C#正则表达式Regex类的用法

    C# 正则表达式 Regex的用法 编程语法

    正则表达式(regex)C语言源码,超强查找/替换算法

    正则表达式是一个很强的工具,可以在你的软件中增强查找、替换、匹配等功能。附件中封装了Henry Spencer的regex library源码,有说明和范例,纯C可移值,简单易用。

    C#正则表达式的使用

    C#正则表达式的使用,希望大家可以学习学习! [C#] bool IsValidEmail(string strIn) { // Return true if strIn is in valid e-mail format. return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3...

    C++正则表达式-regex类(不依赖其他库)

    提取了boost::regex里边的几个正则表达式匹配搜索接口,打包成DLL,以在不依赖于boost的情况下独立编译运行

    正则表达式教程和配套测试工具regextester

    非常棒的正则表达式速成教程,号称30分钟叫...这个教程是配合正则表达式测试工具regextester一起使用的,我已经将regextester打包到里面了,方便大家学习。虽然要五分不少,但是5分确实学会正则表达式还是灰常划算的:)

    linux下的C语言POSIX正则表达式头文件和源文件: regex.h regex.cpp

    linux下posix标准的正则表达式库,支持regcomp, regexec等,可以放到vs2010或vs2012下进行编译。

    java 正则表达式应用jar包 regex-smart.jar

    这是一个简单的正则表达式应用jar包,通过调用其内部方法可实现java的一系列验证,提取和清洗的方法,内附帮助文档,使用非常简单,希望可以为广大编程爱好者编程提供方便,欢迎下载!

    正则表达式整理汇总(参考学习)

    [1]里面在包括一个正则表达式测试小程序 RegexTester.exe [2]正则表达式30分钟入门教程.pdf] [3]正则表达式规则.doc [4]正则表达式30分钟入门教程.mht 自己整理用的,现在分享一下吧。 当然也是为了赚一些...

    C#字符串和正则表达式参考手册.pdf

    在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,...正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

    C++代码实例:正则表达式

    可以采用正则表达式来实现字符串匹配功能。一种简单的正则表达式是由英文字母(区分大小写)、数字及通配符“*”和“?”任意组合而成的。“?”代表任意一个字符,“*”代表零个或任意多个字符。例如,a*b可以匹配acb...

    正则表达式验证工具,常用的正则表达式

    本程序实现了对正则表达式的验证、收藏、备注修改、对界面皮肤的切换、导出...使用导出功能,你将的到一份 50个 常用的正则表达式清单 系统:正则表达式验证工具; 作者:Terry;版权:Terry; 最后,祝:工作愉快!谢谢!

    csharp正则表达式参考手册

    正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序设计语言都支持利用...

    正则表达式自动生成(小白可用)

    RegEx Builder可以帮助您比较两个表达式的结果 可以在软件上定义表达式的组数据 可以查看字符的编辑逻辑 如果在测试的时候获得不准确的字符 您可以重复测试多次,直到得到正确的结果 可以在软件上建立正式...

    C# 正则表达式测试工具

    这是一个非常好用的正则表达式工具,可以在上面测试你想到的正则表达式,而且可以把正则表达式保存下来供下次调用,也可以方便地帮你生成C#代码。另外还附上了一个30分钟快速入门的正则表达式入门教程,希望大家喜欢...

    正则表达式支持库2.0#0版(静态版)

    注意,本支持库中的所有命令均为高级命令,要求使用者具有一定的正则表达式知识基础。易语言RegEx_static.lib支持库为易语言静态支持库,需要易语言系统5.0版本的支持,需要易语言系统核心支持库5.0版本的支持,提供...

    C#正则表达式使用心得

    正则表达式是用来检验和操作字符串的强大工具。简单的理解正则表达式可以认为是一种特殊的验证字符串。正则表达式常见运用是验证...当然正则表达式不仅仅是用于验证,可以说只要运用字符串的地方都可以使用正则表达式

    正则表达式转换为NFA(Regex to NFA).jar

    用JAVA写的一个将正则表达式转换为NFA的代码,基于Thompson算法的思想,递归构建NFA。jar为源码文件。 输出非确定有限自动状态机的有向图。如正则表达式: c(a|b)NFA为:0-c-&gt;1-ep-&gt;2-a-&gt;3-ep-&gt;7 ,0-c-&gt;1-ep-&gt;4-b-&gt;5-...

    C#_Regex_深入正则表达式.doc

    C#_Regex_深入正则表达式.doc

    《学习正则表达式》高清扫描版 PDF

    正则表达式是程序员必备的强大工具,得到了各种Unix实用程序,以及Perl、Java、JavaScript、C#等编程语言的支持。读完本书,你会对正则表达式的常用语法了然于胸。掌握正则表达式是提升编程效率、节约时间的一大法.....

    正则表达式介绍

    正则表达式介绍:正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序...

Global site tag (gtag.js) - Google Analytics