Visual C# 2005中使用正则表达式

转载 2007年09月12日 12:24:00

正则表达式(regular expression)是用来快速、高效地处理文本数据的工具。被处理的文本可以小到一个电子邮件地址,也可以大到一个多行文本输入框中的文本数据。正则表达式不仅可用来确认一段文本是否与一个预定义的模式相匹配,还可以用于从文本中抽取符合某一模式的数据。

正则表达式可以被看成是一个强大的通配符(通用匹配符号)。大多数人都应该很熟悉通配符,例如,当我们看到一个诸如“SAMS”的表达式,那么一个文本串中任何以SAMS开头的字符串都可以与这个表达式匹配。正则表达式提供了比这种通配符能力更强、控制规则更复杂、功能更完善的匹配机制。

本文将对.NET框架提供的支持正则表达式的类做一个概要介绍。要想获得有关正则表达式的更多知识,可参考《Regular Expression Pocket Reference 》(O’Reilly Media出版社,ISBN:059600415X)或《Mastering Regular Expressions》,2nd Edition (O’Reilly Media出版社,ISBN:0596002890)等书籍。它们可以教会你如何创建正则表达式,并提供了最常用的正则表达式列表。

输入确认

正则表达式最重要的用途之一,是确认某个输入的文本是否符合一个预定义的格式。例如,一个能够作为密码的字符串通常要遵循某些强制的规则,以使得密码字符串难以被破解。这些规则常常被定义为正则表达式。正则表达式也常常用来对一些简单的输入执行确认,如确认email地址和电话号码。

RegEx类是.NET框架中一个处理正则表达式的关键类。RegEx类包含了一个名为IsMatch的静态方法,它返回一个布尔值,这个布尔值说明指定的输入串是否与一个给定的正则表达式匹配。

下面的代码中,用到了一个常用的正则表达式,用来测试一个email地址是否有效:

string emailPattern =

@"^([/w-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)||[ccc]

(([/w-]+/.)+))([a-zA-Z]{2,4}||[0-9]{1,3})(/]?)___FCKpd___0quot;;

Console.Write("Enter an e-mail address:");

string emailInput = Console.ReadLine();

bool match = Regex.IsMatch(emailInput, emailPattern);

if (match)

 Console.WriteLine("E-mail address is valid.");

else

 Console.WriteLine("Supplied input is not a valid e-mail address.");

不要担心上面的正则表达式是否有意义。电子邮件模式背后隐藏的基本思想是,它必须包含一些字符,然后是一个@标记,接着是跟在“.”之后的一些字符组合,“.”之后至少要有两个字符。你可以试着在上面的程序段中使用不同的文本作为输入,并观察程序执行的结果。即使你不理解正则表达式本身的含义,也没有关系。只要知道存在正则表达式这样一种工具,并且它可以用来对输入进行确认,这对于你编写应用程序将是极有帮助的。

从输入中抽取数据

正则表达式另一个常见用途是用来分析文本,并从用户的输入中抽取数据(称为组匹配)。

C#中的正则表达式包含了一个称为组(group)的独特特征。使用组,可以为正则表达式中特定的段赋予一个标识符名称。当调用match()方法对模式和输入数据进行比较时,比较的结果实际上是按照组拆分被匹配的符号串,这样就允许你从输入中抽取与每个组相匹配的部分。

例如,我们可以在前一个例子中创建一个名为username的组,用它从一个email地址中提取所有位于@之前的符号串。这样,在执行匹配时,就可以应用正则表达式中的命名组来抽取用户名信息。

看看下面的代码示例,它说明如何从用户在控制台输出的URL地址中同时抽取协议名和端口号。正则表达式的一个良好特性是它自身构成了一个语言,这个语言与C、C++、C#或任何其他编程语言没有依赖关系。这使得我们可以容易地从互联网或参考文献的应用案例中借用某些常用的正则表达式。例如,下面例程中的正则表达式借用自MSDN中的一个例子:

string urlPattern = @"^(?<proto>/w+)://[^/]+?(?<port>:/d+)?/";

Console.WriteLine();

Console.Write("Enter a URL for data parsing: ");

string url = Console.ReadLine();

Regex urlExpression = new Regex(urlPattern, RegexOptions.Compiled);

Match urlMatch = urlExpression.Match(url);

Console.WriteLine("The Protocol you entered was " +

urlMatch.Groups["proto"].Value);

Console.WriteLine("The Port Number you entered was " +

urlMatch.Groups["port"].Value);

运行上面的例程时,如果为它输入一个没有端口号的URL,你将会注意到程序不输入任何组的匹配值。这是因为输入的文本与正则表达式根本不匹配。当输入与正则表达式不匹配时,显然就不能够利用任何命名的组来抽取有意义的数据。如果为上面的例程输入一个带端口号并且与正则表达式匹配的URL,程序产生的输出将如下所示:

Enter a URL for data parsing: http://server.com:2100/home.aspx

The Protocol you entered was http

The Port Number you entered was :2100

 

相关文章推荐

用Visual C# 2005创建快捷方式

创建快捷方式对于绝大多数 Windows 用户来说都是小菜一碟了,然而,这项工作却为程序员带来不少麻烦。.net 没有提供简便直接的创建快捷方式的方法,那么在 .NET 中我们如何为应用程序创建快捷方...

Visual C# 2005中编写Socket网络程序

原文链接: http://tech.sina.com.cn/s/2006-06-19/0921995894.shtml

在Visual C#中使用XML指南之读取XML

对于XML,想必各位都比较了解,我也就不用费笔墨来描述它是什么了,我想在未来的Web开发中XML一定会大放异彩,XML是可扩展标记语言,使用它企业可以制定一套自己的数据格式,数据按照这种格式在网络中传...

如何使用 Visual C# 加密和解密文件

本文介绍如何使用 Microsoft .NET Framework 提供的加密类对文本文件进行加密以使其处于不可读状态,然后再对该信息进行解密,以恢复到原来的格式。 转自http://suppo...

使用Visual C#制作可伸缩个性化窗体

专栏作品使用Visual C#制作可伸缩个性化窗体卢彦 引言:谁都希望自己的应用程序能让人留下一个深刻的印象,让自己的程序窗体有一件与众不同的"外衣"是一个好办法。试想:在一大堆的普通窗口中突然跳...

如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页?

DataGrid Web 控件有内置的自动或自定义分页功能,而 DataGrid Windows 控件则没有。本文演示了如何为 DataGrid Windows 控件创建简单的分页机制。 本文...

HOW TO:使用 Visual C# .NET 打印 RichTextBox 控件的内容

概要本分步指南介绍了如何打印 RichTextBox 控件的内容。RichTextBox 控件没有提供任何打印 RichTextBox 内容的方法。您可以扩展 RichTextBox 类以使用 EM_...

HOW TO:使用 GetOleDbSchemaTable 和 Visual C# .NET 检索架构信息

本文的发布号曾为 CHS309681 展开全部 | 关闭全部 本页 概要 要求 OleDbConnection 对象的 GetOleDbSchemaTab...

Visual C# 2010学习笔记二之设置选项控件的使用

CHeckBox控件:Windows窗体CheckBox控件指示某个特定条件是出于打开状态还是关闭状态。做复选框。 RadioButton控件:Windows窗体RadioButton控件为用户提供由...

Visual C#2010学习笔记三之return返回值的使用

今天详细了解了返回值reutrn的用法,return语句就是终止它出现在其中的方法的执行,并将控制返回给调用方法。它还可以返回一个可选值。我的理解是:return返回值就是你自己设定的方法运行的结果,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Visual C# 2005中使用正则表达式
举报原因:
原因补充:

(最多只允许输入30个字)