.NET 中的正则表达式

前两天面试一个程序员,自己说工作中用到过正则表达式,也比较熟悉,问他要使用正则表达式需要引用那个命名空间,使用哪些类,居然吱吱唔唔答不上来,让他写一个验证电话号码的正则表达式也写不出来,实在是很奇怪这种程序员是怎么工作了两三年的。

言归正传,下面介绍下.net中正则表达式中的使用。

要在.net中使用正则表达式,需要引用System.Text.RegularExpressions 命名空间。新建一个正则表达式类:

string pattern = "some_pattern"; //正则表达式字符串

Regex regex = new Regex(pattern);

使用正则表达式匹配字符串

string input = "some_input";

Match match = regex.Match(input);

Match
Collection matches = regex.Matches(input);

bool isMatch = regex.IsMatch(input);

Match方法返回单个的精确匹配结果,Matches返回所有的匹配结果的一个Match类的集合,IsMatch方法返回是否能够匹配输入字符串的一个bool结果。

Match类是一个保持匹配结果的类,它有一个成员Groups,是一个保存Group class的集合类。

Group 表示单个捕获组的结果。由于存在数量词,一个捕获组可以在单个匹配中捕获零个、一个或更多的字符串,因此 Group 提供 Capture 对象的集合。

Capture 表示单个成功捕获中的一个子字符串。

Group从Capture继承,表示单个捕获组的最后一个字符串。

即对于一个Group 类的实例对象group:

int captureCount = group.Captures.Count;

则group.Value与group.Captures[captureCount - 1].Value是相等的。

以下是几个正则表达式的使用样例:

使用正则表达式检查字符串是否具有表示货币值的正确格式。

代码using System;

using System.Text.RegularExpressions;

public class Test

{

public static void Main ()

{

// Define a regular expression for currency values.

Regex rx = new Regex(@"^-?\d+(\.\d{2})?$");

// Define some test strings.

string[] tests = {"-42", "19.99", "0.001", "100 USD",

".34", "0.34", "1,052.21"};

// Check
each test string against the regular expression.

foreach (string test in tests)

{

if (rx.IsMatch(test))

{

Console.WriteLine("{0} is a currency value.", test);

}

else

{

Console.WriteLine("{0} is not a currency value.", test);

}

}

}

}

// The example displays the following output to the console:

// -42 is a currency value.

// 19.99 is a currency value.

// 0.001 is not a currency value.

// 100 USD is not a currency value.

// .34 is not a currency value.

// 0.34 is a currency value.

// 1,052.21 is not a currency value.

使用正则表达式检查字符串中重复出现的词。

using System;

using System.Text.RegularExpressions;

public class Test

{

public static void Main ()

{

// Define a regular expression for repeated words.

Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b",

RegexOptions.Compiled | RegexOptions.IgnoreCase);

// Define a test string.

string text = "The the quick brown fox fox jumped over the lazy dog dog.";

// Find matches.

MatchCollection matches = rx.Matches(text);

// Report the number of matches found.

Console.WriteLine("{0} matches found in:\n {1}",

matches.Count,

text);

// Report on each match.

foreach (Match match in matches)

{

GroupCollection groups = match.Groups;

Console.WriteLine("'{0}' repeated at positions {1} and {2}",

groups["word"].Value,

groups[0].Index,

groups[1].Index);

}

}

}

// The example produces the following output to the console:

// 3 matches found in:

// The the quick brown fox fox jumped over the lazy dog dog.

// 'The' repeated at positions 0 and 4

// 'fox' repeated at positions 20 and 25

// 'dog' repeated at positions 50 and 54

使用 Capture 对象在控制台中显示每个正则表达式匹配项组的成员。

代码string text = "One fish two fish red fish blue fish";

string pat = @"(?<1>\w+)\s+(?<2>fish)\s*";

// 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);

while (m.Success)

{

// Display the first match and its capture set.

System.
Console.WriteLine("Match=[" + m + "]");

CaptureCollection cc = m.Captures;

foreach (Capture c in cc)

{

System.Console.WriteLine("Capture=[" + c + "]");

}

// Display Group1 and its capture set.

Group g1 = m.Groups[1];

System.Console.WriteLine("Group1=[" + g1 + "]");

foreach (Capture c1 in g1.Captures)

{

System.Console.WriteLine("Capture1=[" + c1 + "]");

}

// Display Group2 and its capture set.

Group g2 = m.Groups[2];

System.Console.WriteLine("Group2=["+ g2 + "]");

foreach (Capture c2 in g2.Captures)

{

System.Console.WriteLine("Capture2=[" + c2 + "]");

}

// Advance to the next match.

m = m.NextMatch();

}

// The example displays the following output:

// Match=[One fish ]

// Capture=[One fish ]

// Group1=[One]

// Capture1=[One]

// Group2=[fish]

// Capture2=[fish]

// Match=[two fish ]

// Capture=[two fish ]

// Group1=[two]

// Capture1=[two]

// Group2=[fish]

// Capture2=[fish]

// Match=[red fish ]

// Capture=[red fish ]

// Group1=[red]

// Capture1=[red]

// Group2=[fish]

// Capture2=[fish]

// Match=[blue fish]

// Capture=[blue fish]

// Group1=[blue]

// Capture1=[blue]

// Group2=[fish]

// Capture2=[fish]

时间: 2024-12-21 08:26:47

.NET 中的正则表达式的相关文章

探究Python中的正则表达式

  这篇文章主要介绍了Python中的正则表达式的一些用法,正则表达式的使用是Python学习进阶中的重要知识,需要的朋友可以参考下 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它"匹配&q

C#中的正则表达式(1)

正则 C#中的正则表达式 Jeffrey E.F. Friedl写了一本关于正则表达式的书<精通正则表达式>.作者为了使读者更好的理解和掌握正则表达式,编造了一个故事.该书的语言以perl为主.据我所知C#中的正则表达式也是基于perl5.所以它们应该有许多的共同之处. 其实,我并不打算原封不动的对该书的内容进行翻译,一则这本书内容太多了,我根本就不胜任翻译这项工作:二则如果我真的把这本书翻译过来,同时把里面的代码换成C#,在没有征得原作者的情况下,可能有侵权的嫌疑了.所以,权当作读书笔记好了

在ASP中利用“正则表达式” 对象实现UBB风格的论坛

ubb|对象|正则 上一次,我们谈到在ASP中如何利用"正则表达式"对象来实现各种数据的校验,文中描述了正则表达式对象的强大功能,接下来,我们来看看有关"正则表达式"对象的其他功能.当我们在网上冲浪的时候,尤其是浏览各类论坛的时候,经常会见到"UBB代码"这个词语.什么是UBB代码呢?UBB代码是HTML的一个变种http://www.alixixi.com/program/a/,是Ultimate Bulletin Board (国外一个BBS

T-SQL中的正则表达式

正则 T-SQL中的正则表达式 原作者:Cory Koski发表时间:2003/06/24         本文来自Cory Koski.Cory写道:"我最近遇到一个问题,就是试图在数据库域中搜索一个正则表达式.还没有一个版本的SQLServer内部支持正则表达式,但我发现了一个将正则表达式的所有优点添加到你的T_SQL应用的方法.为了更容易的使用正则表达式,我们可以使用自定义函数(User Defined Function, UDF)来帮助我们并使工作简洁." 在这个解决方案中,我

ASP中利用“正则表达式” 对象实现UBB代码

ubb|对象|正则 上一次,我们谈到在ASP中如何利用"正则表达式"对象来实现各种数据的校验,文中描述了正则表达式对象的强大功能,接下来,我们来看看有关"正则表达式"对象的其他功能.当我们在网上冲浪的时候,尤其是浏览各类论坛的时候,经常会见到"UBB代码"这个词语.什么是UBB代码呢?UBB代码是HTML的一个变种http://www.alixixi.com/program/a/,是Ultimate Bulletin Board (国外一个BBS

在ASP中利用正则表达式 对象实现UBB风格的论坛(转)

ubb|对象|正则 在ASP中利用"正则表达式" 对象实现UBB风格的论坛     转贴者语:无意中在中华网发现了此文,说的就是本站论坛的UBB风格的实现原理,所以贴出来和大家一起分享. 我们谈到在ASP中如何利用"正则表达式"对象来实现各种数据的校验,文中描述了正则表达式对象的强大功能,接下来,我们来看看有关"正则表达式"对象的其他功能.当我们在网上冲浪的时候,尤其是浏览各类论坛的时候,经常会见到"UBB代码"这个词语.什么

通过几个例子了解asp中使用正则表达式

正则 Http://www.asp888.net 豆腐技术站 通过几个非常实用的例子了解asp中使用正则表达式 我们知道,在 VBscript 5.0 开始支持 正则表达式,下面我们通过几个常用的应用例子来帮助我们了解和使用 这个好的程序书写格式1首先,密码验证 我们的密码验证的规则是--密码的第一个字母不能是数字,密码的长度在在 4 和 16 之间而且密码中只能包含 字符,数字和下划线 我们姑且不去考虑这样的限制是否有道理,我们的 任务是 学习 正则表达式Function ValidatePa

用Python编写网络爬虫(七):Python中的正则表达式教程

接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. 一. 正则表达式基础 1.1.概念介绍 正则表达式是用于处理字符串的强大工具,它并不是Python的一部分. 其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同. 它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表达式的语法都是一样的. 下

在Groovy中编写正则表达式

与Java相比, 在Groovy中编写正则表达式(regexes)简直是一种乐趣.在 Java中, regexes编程不仅需处理Pattern和Matcher对象,而且还要编写繁琐的 样板代码(boilerplate coding).而Groovy对这两个Java对象做了简单封装, 添加了一些额外的实用方法,并给出一个简化的新的语法和3个新的操作符. Groovy中,您可用slashy(斜线)语法"/../"定义字符串.这样以来便可避 免在Java正则表达式中使用过多的反斜线.例如:

Dreamweaver中使用正则表达式替换href中的内容

 可能在dw中使用正则表达式替换字符串的朋友很少,下面我来给大家介绍Dreamweaver中使用正则表达式替换href中的内容吧.    在Dreamweaver中使用正则表达式替换href中的内容,就像下面这些href中的内容复杂多样的情况下,href="/html/u.html",href="/tuho/huko.html",想将它们全部替换成href="#" ,具体做法如下: 查找: href="[^"]*"