`
net_liu
  • 浏览: 232712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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#中使用正则表达式详解

    C#中使用正则表达式详解 正则表达式是使用某种模式来匹配一类字符串的公式。在 C# 中,正则表达式类位于 System.Text.RegularExpressions 命名空间中,它们具有用来检查给出的字符串是否符合规则的属性和方法。 ...

    C#中使用正则表达式详解.pdf

    正则表达式中有一些特定的元字符,它们代表了一定的含义,用于匹配特定类型的字符或组合: - `\d`:匹配任何数字(0-9)。 - `\D`:匹配非数字字符。 - `\w`:匹配字母、数字或下划线(等价于[a-zA-Z0-9_])。 - `\...

    C#中使用正则表达式验证Email格式、IP地址格式和URL网址格式

    在C#编程语言中,正则表达式...通过以上三个实例,我们展示了如何在C#中使用正则表达式对电子邮件地址、IP地址和URL网址进行格式验证。这些正则表达式不仅能够确保数据的准确性,还能提升应用程序的健壮性和用户体验。

    正则表达式测试工具C#版(src)

    - 学习正则表达式的应用:查看源码可以学习如何在实际项目中使用`Regex`类进行正则匹配和替换操作。 - 调试技巧:源码中可能会有调试正则表达式的辅助逻辑,帮助开发者更好地理解和调试自己的正则表达式。 通过...

    C#中的正则表达式是如何使用的

    以下是如何在C#中使用正则表达式的一些基本步骤和代码示例。 正则表达式是C#中处理字符串的强大工具。通过Regex类,可以轻松地在C#应用程序中实现复杂的文本匹配和处理功能。掌握正则表达式的语法和使用方法,对于...

    C#中使用正则表达式初探

    正则表达式中有一些特殊的字符,被称为元字符,它们具有特殊的含义。以下是一些常见的元字符及其用途: - `.`:表示任意单个字符。 - `*`:表示前面的字符可以出现零次或多次。 - `+`:表示前面的字符至少出现一次...

    C#中 用正则表达式

    ### C#中使用正则表达式的背景与意义 在软件开发过程中,经常需要处理字符串,例如验证用户输入是否符合特定格式(如邮箱、手机号等)。正则表达式作为一种强大的文本处理工具,在这方面有着不可替代的作用。C#作为...

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

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

    c#使用正则表达式验证身份证号码

    c#使用正则表达式验证身份证号码,工程完全可以运行,方便大家参考和学习

    C#正则表达式语法大全

    C#正则表达式语法大全涵盖了在C#编程语言中使用正则表达式进行文本匹配、提取、替换等操作所必需的语法知识。正则表达式是一种强大的文本处理工具,它可以描述字符串的模式,让我们能够执行复杂的搜索和匹配操作。 ...

    c#使用正则表达式验证输入密码条件

    这需要具体实现时根据实际输入进行判断,通常不在正则表达式中处理。 结合以上规则,一个完整的正则表达式可能如下所示: ```regex ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()]).{8,20}$ ``` 这个表达式会...

    C#使用正则表达式验证IP地址

    使用正则表达式来判断用户输入的IP地址格式是否正确

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

    本文将深入探讨C#中的字符串操作和正则表达式使用,帮助你更好地理解和运用这些工具。 一、C#字符串 1. 字符串基础:在C#中,字符串是不可变对象,这意味着一旦创建,就不能更改。字符串常量通常用双引号括起,...

    在C#中利用正则表达式判断用户输入是否是数字

    在C#中,我们可以使用System.Text.RegularExpressions命名空间中的Regex类来使用正则表达式。 在给定的代码中,我们可以看到作者使用了四个正则表达式对象:objNotNumberPattern、objTwoDotPattern、...

    C#/.Net正则表达式测试工具

    DotNet正则表达式测试工具,基于.net1.1开发,vista以上操作系统绿色免安装。 用于编写正则表达式时进行测试,支持正则选项(是否忽略大小写、是否多行模式)、支持正则替换

    C#实现正则表达式判断

    本项目"**C#实现正则表达式判断**"主要探讨了如何在C#中使用正则表达式进行模式匹配和验证。 首先,我们需要了解正则表达式的基础概念。正则表达式是由字符和特殊符号组成的字符串,这些字符和符号代表了一组可能的...

    C#中的正则表达式详解

    例如,在正则表达式中,`\b` 表示单词边界,可以用来精确匹配单词的起始或结束位置。例如,要查找所有以 "th" 开头的单词,可以使用 `\bth` 这样的正则表达式。类似地,要查找所有以 "th" 结尾的单词,则可以使用 `...

    正则表达式生成器C#源码.rar

    这里用C#实现了正则表达式相关功能,并记录了所有的正则表达式的相关符号,是一个不可多得的正则表达式生成工具,这个工具适用3种场合: ...2.需要C#正则表达式示例代码的朋友 3.常规正则表达式测试

    C#正则表达式大全, 判断字符串是否为正整数,中文,英文.....

    在 C# 中,我们可以使用 System.Text.RegularExpressions 命名空间中的 Regex 类来实现正则表达式的操作。 知识点 1:正则表达式替换字符串 在上面的代码中,我们可以看到一个名为 RegexReplace 的方法,该方法...

Global site tag (gtag.js) - Google Analytics