知识大全 正则表达式编程Regex类用法

Posted

篇首语:行是知之始,知是行之成。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 正则表达式编程Regex类用法相关的知识,希望对你有一定的参考价值。

正则表达式编程Regex类用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  这一篇主要是将Regex这个类的用法的 关于Match及MatchCollection类会在下一篇讲到         对于正则表达式的应用 基本上可以分为验证 提取 分割和替换 仅仅利用Regex类就可以实现验证和简单替换         利用Regex类实现验证        经历 年的备案和DNS停止解析风波之后 大部分的带有反馈性的网站和论坛都对一些敏感词进行了过滤 包含有这类敏感词的文章要么内容被替换要么被禁止发表 利用Regex类就可以实现这个功能 下面是一个例子         /// <summary>        /// 检查字符串中是否有 孙权 这个敏感词        /// </summary>        public void IsMatchDemo()                string source = 刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操许攸郭嘉需晃袁绍 ;        Regex regex = new Regex( 孙权 )         //if (Regex IsMatch(source 孙权 ))        //下面这句和上面被注释掉的一句作用的同样的        if (regex IsMatch(source))                Console WriteLine( 字符串中包含有敏感词 孙权! )                 输出结果 字符串中包含有敏感词 孙权!        对于上面的例子 如果要检查的字符串中包含 孙权 这个关键词就会在控制台上输出提示 当然在实际的应用中可能是包含有被禁止的词语的内容不允许提交而不是仅仅提示了 不过这类情况仍有办法可以绕过 可以使用 孙 权 或 孙+权 来替换孙权从而来绕过验证        

        对于中文字符串还比较好说 对于英文的字符串还要考虑每个字母的大小写情况了 比如我们禁止在内容中出现某个关键词(如太CCTV的CCTV 或者CCAV) 难道我们要针对字符串中每个字母的大小写情况进行多种情况的组合验证?不 完全没有必要 下面就是一个例子         /// <summary>        /// 检查字符串中是否有 def 的任何大小写形式        /// </summary>        public void IsMatchDemoWithOption()                string source = 刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操DEF许攸郭嘉需晃袁绍 ;        Regex regex = new Regex( def RegexOptions IgnoreCase)         if (regex IsMatch(source))                Console WriteLine( 字符串中包含有敏感词 def! )                         输出结果 字符串中包含有敏感词 def!        在上面的例子中 实例化Regex时采用了两个带参数的构造函数 其中第二个参数就是上一篇中提到的RegexOptions枚举 RegexOptions IgnoreCase表示匹配字符串的时候不管大小写是否一致         此外 在Regex中存在着一些功能相同的静态方法和实例方法 如 IsMatch()方法 在第一个例子中我还写出了两种方法的实例 如下         Regex regex = new Regex( 孙权 )         //if (Regex IsMatch(source 孙权 ))        //下面这句和上面被注释掉的一句作用的同样的        if (regex IsMatch(source))        其实在 中很多类都有这样类似的情况 在System IO命名空间下还有File及FileInfo这样的静态类和非静态类的情况 其实它们提供了相似的功能 用小沈阳的话说 这是为什么呢 ?有部分是出自效率的考虑 并且也有出自让代码编写方便和看起来简洁的因素 对于偶尔一半次为之的情况 建议使用静态方法 这样有可能会提高效率(因为采用静态方法调用的会被内部缓存 默认情况下会缓存 个 可以通过设置Regex类的CacheSize属性来更改缓存个数) 如果是要在循环中多次使用 那就采用实例方法吧                 使用Regex类进行替换        上面的处理仅仅是查看提交的内容中是否有被禁止的关键词 其实有时候还可以做到将被禁止的关键词进行替换 例如将上面用到的字符串中的任何形式的 ABC 替换成 | 下面就是一个例子         /// <summary>        /// 实现字符串替换功能        /// </summary>        public void Replace()                string source = 刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操DEF许攸郭嘉需晃袁绍 ;        Regex regex = new Regex( abc RegexOptions IgnoreCase)         string result=regex Replace(source | )         Console WriteLine( 原始字符串 + source)         Console WriteLine( 替换后的字符串 + result)                 输出结果         原始字符串 刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操DEF许攸郭嘉需晃袁绍        替换后的字符串 刘备|关羽|张飞|赵云|诸葛亮|孙权|周瑜|鲁肃|曹操DEF许攸郭嘉需晃袁绍        实际上有时候我们遇到的情况可能不仅仅这么简单 例如有时候我们希望将字符串中的任何形式的 ABC 及 DEF 实现HTML形式的加粗 也就是替换成<b>abc</b>及<b>def</b>这种形式 当然还保持和原来一致的大小写形式 代码如下         /// <summary>        /// 实现字符串替换功能        /// </summary>        public void ReplaceMatchEvaluator()                string source = 刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操DEF许攸郭嘉需晃袁绍 ;        Regex regex = new Regex( [A Z] RegexOptions IgnoreCase)         string result = regex Replace(source new MatchEvaluator(OutPutMatch))         Console WriteLine( 原始字符串 + source)         Console WriteLine( 替换后的字符串 + result)                 /// <summary>        /// MatchEvaluator委托中调用的方法 可以对匹配结果进行处理        /// </summary>        /// <param name= match >操作过程中的单个匹配</param>        /// <returns></returns>        private string OutPutMatch(Match match)                return <b> + match Value + </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类的一些简单用法 也没有讲述正则表达式的相关知识 不过即使如此也能减轻我们的一部分工作 学习和灵活运用正则表达式是一个长期积累的过程 cha138/Article/program/net/201311/11949

相关参考

知识大全 正则表达式

C#正则表达式编程(四):正则表达式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  提供了功能强

知识大全 使用正则表达式[3]

PHP网络编程:使用正则表达式[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 使用正则表达式[2]

PHP网络编程:使用正则表达式[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 使用正则表达式[1]

PHP网络编程:使用正则表达式[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 PHP处理正则表达式[3]

PHP网络编程:PHP处理正则表达式[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 PHP处理正则表达式[2]

PHP网络编程:PHP处理正则表达式[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 PHP处理正则表达式[1]

PHP网络编程:PHP处理正则表达式[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 正则表达式使用代码片段

  在javautilregex包中包括了两个类Pattern(模式类)和Matcher(匹配器类)Pattern类是用来表达和陈述所要搜索模式的对象Matcher类是真正影响搜索的对象另加一个新的例

知识大全 php小经验:解析preg

  正则表达式在PHP中的应用在PHP应用中正则表达式主要用于•正则匹配根据正则表达式匹配相应的内容•正则替换根据正则表达式匹配内容并替换•正则分割根据正则表达式分割字符串在PHP中有两类正则表达式函

知识大全 模板引擎正则表达式调试小技巧

  很久没有遇上PHP难题了这次正则问题占了一点时间还是老问题最大回溯递归限制问题学习透之后其实并不难修改调试有这类问题的正则主要是以下几点  基于正则表达式替换的模板引擎很容易遇上正则表达式最大回溯