`
hugh-lin
  • 浏览: 72942 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

[转]全面剖析C#正则表达式

阅读更多

        到目前为止,许多的编程语言和工具都包含对正则表达式的支持,当然.NET也不例外,.NET基础类库中包含有一个名称空间和一系列可以充分发挥规则表达式威力的类。 
        正则表达式的知识可能是不少编程人员最烦恼的事儿了。如果你还没有规则表达式方面的知识的话,建议从正则表达式的基础知识入手。前参见 正则表达式语法。 

        下面就来研究C#中的正则表达式,C#中的正则表达式包含在.NET基础雷库的一个名称空间下,这个名称空间就是System.Text.RegularExpressions。该名称空间包括8个类,1个枚举,1个委托。他们分别是:
                     Capture: 包含一次匹配的结果; 
                     CaptureCollection: Capture的序列; 
                     Group: 一次组记录的结果,由Capture继承而来; 
                     GroupCollection:表示捕获组的集合
                     Match: 一次表达式的匹配结果,由Group继承而来; 
                     MatchCollection: Match的一个序列; 
                     MatchEvaluator: 执行替换操作时使用的委托; 
                     Regex:编译后的表达式的实例。 
                     RegexCompilationInfo:提供编译器用于将正则表达式编译为独立程序集的信息
                     RegexOptions 提供用于设置正则表达式的枚举值
Regex类中还包含一些静态的方法: 
                    Escape: 对字符串中的regex中的转义符进行转义; 
                    IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值; 
                    Match: 返回Match的实例; 
                    Matches: 返回一系列的Match的方法; 
                    Replace: 用替换字符串替换匹配的表达式; 
                    Split: 返回一系列由表达式决定的字符串; 
                    Unescape:不对字符串中的转义字符转义。

下面介绍他们的用途:
        先看一个简单的匹配例子,我们首先从使用Regex、Match类的简单表达式开始学习。 Match m = Regex.Match("abracadabra", "(a|b|r)+"); 我们现在有了一个可以用于测试的Match类的实例,例如:if (m.Success){},如果想使用匹配的字符串,可以把它转换成一个字符串:   MesaageBox.Show("Match="+m.ToString()); 这个例子可以得到如下的输出: Match=abra。这就是匹配的字符串了。

        Regex 类表示只读正则表达式类。它还包含各种静态方法(在下面的实例中将逐一介绍),允许在不显式创建其他类的实例的情况下使用其他正则表达式类。

        以下代码示例创建了 Regex 类的实例并在初始化对象时定义一个简单的正则表达式。声明一个Regex对象变量:Regex objAlphaPatt;,接着创建Regex对象的一个实例,并定义其规则:objAlphaPatt=new Regex("[^a-zA-Z]");

        IsMatch方法指示 Regex 构造函数中指定的正则表达式在输入字符串中是否找到匹配项。这是我们使用C#正则表达式时最常用的方法之一。下面的例子说明了IsMatch方法的使用:
if( !objAlphaPatt.IsMatch("testisMatchMethod"))
 lblMsg.Text = "匹配成功";
else
 lblMsg.Text = "匹配不成功";
这段代码执行的结果是“匹配成功”
if( ! objAlphaPatt.IsMatch("testisMatchMethod7654298"))
 lblMsg.Text = "匹配成功";
else
 lblMsg.Text = "匹配不成功";
这段代码执行的结果是“匹配不成功”

         Escape方法表示把转义字符作为字符本身使用,而不再具有转义作用,最小的元字符集(\、*、+、?、|、{、[、(、)、^、$、.、# 和空白)。Replace方法则是用指定的替换字符串替换由正则表达式定义的字符模式的所有匹配项。看下面的例子,还是使用上面定义的Regex对象:objAlphaPatt.Replace("this [test] ** replace and escape" ,Regex.Escape("()"));他的返回结果是:this\(\)\(\)test\(\)\(\)\(\)\(\)\(\)replace\(\)and\(\)escape,如果不是Escape的话,则返回结果是:this()()test()()()()()replace()and()escape,Unescape 反转由 Escape 执行的转换,但是,Escape 无法完全反转 Unescape。

        Split方法是把由正则表达式匹配项定义的位置将输入字符串拆分为一个子字符串数组。例如:
Regex r = new Regex("-"); // Split on hyphens.
string[] s = r.Split("first-second-third");
for(int i=0;i<s.Length;i++)
{
 Response.Write(s[i]+"<br>");
}

执行的结果是:
First
Second
Third

        看上去和String的Split方法一样,但string的Split方法在由正则表达式而不是一组字符确定的分隔符处拆分字符串。

        Match方法是在输入字符串中搜索正则表达式的匹配项,并Regex 类的 Match 方法返回 Match 对象,Match 类表示正则表达式匹配操作的结果。下面的例子演示Match方法的使用,并利用Match对象的Group属性返回Group对象:

string text = @"public string testMatchObj string s string  match ";
string pat = @"(\w+)\s+(string)";
// Compile the regular expression.
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
// Match the regular expression pattern against a text string.
Match m = r.Match(text);
int matchCount = 0;
while (m.Success)
{
 Response.Write("Match"+ (++matchCount) + "<br>");
 for (int i = 1; i <= 2; i++)
 {
  Group g = m.Groups[i];
  Response.Write("Group"+i+"='" + g + "'"  + "<br>");
  CaptureCollection cc = g.Captures;
  for (int j = 0; j < cc.Count; j++)
  {
   Capture c = cc[j];
   Response.Write("Capture"+j+"='" + c + "', Position="+c.Index + "<br>");
  }
 }
 m = m.NextMatch();
}

该事例运行结果是:
Match1
Group1='public'
Capture0='public', Position=0
Group2='string'
Capture0='string', Position=7
Match2
Group1='testMatchObj'
Capture0='testMatchObj', Position=14
Group2='string'
Capture0='string', Position=27
Match3
Group1='s'
Capture0='s', Position=34
Group2='string'
Capture0='string', Position=36

        MatchCollection 类表示成功的非重叠匹配的只读的集合,MatchCollection 的实例是由 Regex.Matches 属性返回的,下面的实例说明了通过在输入字符串中找到所有与Regex中指定的匹配并填充 MatchCollection。

MatchCollection mc;
Regex r = new Regex("match");
mc = r.Matches("matchcollectionregexmatchs");
for (int i = 0; i < mc.Count; i++)
{
 Response.Write( mc[i].Value + " POS:" + mc[i].Index.ToString() + "<br>");
}
该实例运行的结果是:
match POS:0
match POS:20

        正则表达式对初学者来说,往往是一种神秘的东西,实际上,仔细研究一下也就是那么回事儿,没有多么的难。希望这篇文章对你有所帮助。

分享到:
评论

相关推荐

    c# 正则表达式生成工具 源代码

    在IT领域,正则表达式...通过对这个源代码的分析和学习,开发者不仅可以掌握C#正则表达式的基本用法,还能了解到一些高级特性和实际应用中的技巧。这对于提升软件开发能力,特别是在处理文本数据时,是非常有帮助的。

    C#正则表达式测试工具(项目源码)

    总的来说,这个C#正则表达式测试工具项目是开发者提升正则表达式技能的好资源,不仅可以用于实际的开发工作,也可以作为学习和教学的案例。通过深入研究源代码,开发者可以更好地理解正则表达式的工作原理,提高在C#...

    全面剖析C#正则表达式

    【全面剖析C#正则表达式】 在C#编程中,正则表达式是一种强大的文本处理工具,用于模式匹配和字符串查找。C#通过.NET框架提供了对正则表达式的全面支持,位于`System.Text.RegularExpressions`命名空间下。该命名...

    C#正则表达式 和 测试工具

    总的来说,掌握C#正则表达式能显著提升处理文本数据的能力,而选择合适的测试工具将使这个过程变得更加高效和直观。通过不断的实践和学习,你可以更好地利用这一强大的工具来解决各种复杂的问题。

    C# 正则表达式总结

    综上所述,C#的正则表达式提供了丰富的功能,用于处理和分析文本。通过学习和熟练掌握正则表达式,开发者可以在处理字符串时更高效、更精确。在实际开发中,结合提供的测试代码,可以快速理解和应用这些概念,提升...

    C#正则提取中文

    ### C#正则表达式提取中文 在C#中,`System.Text.RegularExpressions`命名空间提供了`Regex`类,该类是执行正则表达式操作的核心。`Regex`类包含了许多静态方法,如`Matches`、`Match`、`Split`等,这些方法可以...

    简单C#正则表达式验证工具源码

    本项目"简单C#正则表达式验证工具源码"就是一个基于C#(Visual Studio 2008)开发的工具,它可以帮助开发者测试和验证正则表达式的效果,以确保它们能够按照预期工作。 首先,`Regex`类提供了多个静态方法,如`...

    C#正则表达式语法

    正则表达式在C#中被广泛应用于数据验证、文本提取、日志分析等多个场景。 在C#中,正则表达式的基本语法遵循.NET Framework的标准,它包含了一系列的元字符,这些元字符具有特殊的含义,能够帮助构建各种复杂的模式...

    C#正则表达式测试工具,传统NFA引擎

    这个压缩包文件包含了一个基于C#的正则表达式测试工具,该工具利用了C#正则表达式的传统非确定性有限自动机(NFA)引擎。 C#的正则表达式API提供了丰富的功能,包括但不限于以下几点: 1. **模式匹配**:可以使用`...

    C# 正则表达式用法

    下面将详细介绍C#正则表达式的基本概念、常用模式以及实际应用案例。 ### 基本概念 正则表达式是一种用于描述字符串模式的语法。在C#中,主要通过`System.Text.RegularExpressions`命名空间下的`Regex`类来使用...

    c#正则表达式调试工具 源码和exe

    C#正则表达式调试工具是一款专为C#开发者设计的实用软件,它可以帮助程序员在编写和测试正则表达式时进行调试和分析。这款工具提供了源码和可执行文件(exe),使得用户不仅可以直接使用,也能深入学习其内部工作...

    SQL 语法分析,正则表达式解析C#文件;正则表达式实现的语法分析引擎

    在这个主题中,我们将深入探讨SQL语法分析、正则表达式的应用以及如何在C#中使用正则表达式来解析文件。 首先,SQL语法分析是理解和执行SQL查询的关键步骤。当一个SQL语句被提交到数据库管理系统时,系统会对其进行...

    使用正则表达式验证一年的12个月份

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作,广泛应用于编程语言中。在IT行业中,正则表达式...无论是在网页表单验证、服务器端数据处理还是数据分析场景,正则表达式都是一个强大而灵活的工具。

    C#正则表达式 正则表达式

    总的来说,掌握C#中的正则表达式对于任何程序员来说都是一项重要技能,尤其在处理数据验证、文本分析和搜索替换等任务时。通过深入学习和实践,你将能够熟练地运用正则表达式解决实际问题。而《C#字符串和正则表达式...

    C#表单正则表达式验证手册

    《C#表单正则表达式验证手册》是一份详细阐述如何在C#环境中利用正则表达式进行表单验证的实用指南。手册的核心在于提供更灵活、更强大的验证方式,超越了Visual Studio (VS)内置控件的功能限制。通过学习这份手册,...

    C#中的正则表达式详解

    ### C#中的正则表达式详解 #### 一、正则表达式简介 正则表达式(Regular Expression),简称regex或regexp,是一种用于处理文本的强大工具。它提供了一种灵活而高效的方式来查找、提取、替换或者删除文本中的特定...

Global site tag (gtag.js) - Google Analytics