WEB开发网
开发学院软件开发C语言 C#正则表达式编程(二):Regex 类用法 阅读

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

 2010-09-30 22:44:15 来源:WEB开发网   
核心提示: 对于中文字符串还比较好说,对于英文的字符串还要考虑每个字母的大小写情况了,C#正则表达式编程(二):Regex 类用法(2),比如我们禁止在内容中出现某个关键词(如太CCTV的CCTV,或者CCAV),可以通过设置Regex类的CacheSize属性来更改缓存个数),如果是要在循环中多次使用,难

对于中文字符串还比较好说,对于英文的字符串还要考虑每个字母的大小写情况了。比如我们禁止在内容中出现某个关键词(如太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属性来更改缓存个数),如果是要在循环中多次使用,那就采用实例方法吧。

Tags:正则 表达式 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接