口碑好的定制网站建设公司,重庆智能网站建设公司,手机网站js电话悬浮,江门网红打卡点上一篇讲述了在C#中有关正则表达式的类之间的关系#xff0c;以及它们的方法#xff0c;这一篇主要是将Regex这个类的用法的#xff0c;关于Match及MatchCollection类会在下一篇讲到。对于正则表达式的应用#xff0c;基本上可以分为验证、提取、分割和替换。仅仅利用Regex…上一篇讲述了在C#中有关正则表达式的类之间的关系以及它们的方法这一篇主要是将Regex这个类的用法的关于Match及MatchCollection类会在下一篇讲到。对于正则表达式的应用基本上可以分为验证、提取、分割和替换。仅仅利用Regex类就可以实现验证和简单替换。利用Regex类实现验证经历2009年的备案和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)) 其实在.NET Framework中很多类都有这样类似的情况在System.IO命名空间下还有File及FileInfo这样的静态类和非静态类的情况其实它们提供了相似的功能用小沈阳的话说“这是为什么呢”有部分是出自效率的考虑并且也有出自让代码编写方便和看起来简洁的因素。对于偶尔一半次为之的情况建议使用静态方法这样有可能会提高效率因为采用静态方法调用的正则表达式会被内部缓存默认情况下会缓存15个可以通过设置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 resultregex.Replace(source, |); Console.WriteLine(原始字符串 source); Console.WriteLine(替换后的字符串 result); } 输出结果原始字符串刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操DEF许攸郭嘉需晃袁绍替换后的字符串刘备|关羽|张飞|赵云|诸葛亮|孙权|周瑜|鲁肃|曹操DEF许攸郭嘉需晃袁绍实际上有时候我们遇到的情况可能不仅仅这么简单例如有时候我们希望将字符串中的任何形式的“ABC”及“DEF”实现HTML形式的加粗也就是替换成babc/b及bdef/b这种形式当然还保持和原来一致的大小写形式代码如下 /// summary /// 实现字符串替换功能 /// /summary public void ReplaceMatchEvaluator() { string source 刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操DEF许攸郭嘉需晃袁绍; Regex regex new Regex([A-Z]{3}, RegexOptions.IgnoreCase); string result regex.Replace(source, new MatchEvaluator(OutPutMatch)); Console.WriteLine(原始字符串 source); Console.WriteLine(替换后的字符串 result); } /// summary /// MatchEvaluator委托中调用的方法可以对匹配结果进行处理 /// /summary /// param namematch操作过程中的单个正则表达式匹配/param /// returns/returns private string OutPutMatch(Match match) { return b match.Value /b; } 输出结果如下原始字符串刘备ABC关羽ABc张飞Abc赵云abc诸葛亮aBC孙权abC周瑜AbC鲁肃aBc曹操DEF许攸郭嘉需晃袁绍替换后的字符串刘备bABC/b关羽bABc/b张飞bAbc/b赵云babc/b诸葛亮baBC/b孙权babC/b周瑜bAbC/b鲁肃baBc/b曹操bDEF/b许攸郭嘉需晃袁绍在上面的例子中我们使用了MatchEvaluator委托并且还涉及到了Match类Match类将会在下一篇讲述在MatchEvaluator委托中使用到的Match类表示了单个的正则表达式匹配通过改变match实例中Value的值来达到完成替换的目的。在本篇中仅仅是讲述了Regex类的一些简单用法也没有讲述正则表达式的相关知识不过即使如此也能减轻我们的一部分工作学习和灵活运用正则表达式是一个长期积累的过程。 周公2010-02-25转载于:https://www.cnblogs.com/zhoufoxcn/archive/2010/03/04/2515649.html