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 Studio 2005 教程

QUOTE:Visual Studio 2005(3):C# 2.0 语言和编译器资源简介随着Dot NET Framework 2.0和Visual Studio 2005的发布,dot net平台...
  • justmuch
  • justmuch
  • 2006年06月12日 11:02
  • 17405

《Visual C# 2005入门经典》学习总结

        经过将近半个月的时间把James Foxall的 《Visual C# 2005入门经典》读了一遍,智者总归是智者,能够让读者这么容易去接受一门语言。现在我我从书中看到的一些东西总结一...
  • rocket5725
  • rocket5725
  • 2008年01月13日 20:38
  • 853

Visual+C#+2005文件IO和数据存取秘诀 目录

第1章磁盘 c文件夹与文件的处理技巧条款1综述 条款2路径指定方式 条款3使用DriveInfo类取得计算机的磁盘信息 条款4使用My.Computer.FileSystem对象取得计算机的磁盘信息条...
  • educast
  • educast
  • 2008年10月05日 16:42
  • 726

安装Visual Studio 2005 SP1--极其惨烈的人生体验

今天在微软的网站上面看到了Microsoft® Visual Studio® 2005 Team Suite Service Pack 1 在花了好几个小时极其痛苦的安装经验后,将需要注意的地方写下来...
  • downmoon
  • downmoon
  • 2007年03月01日 13:40
  • 23753

Visual C# 2005快速入门之编写方法

 在下面的练习中,将创建一个应用程序,它包含的一个方法能够计算一名顾问的收费金额——假定该顾问每天收取固定的费用,将根据工作了多少天来收费。首先要开发应用程序的逻辑,然后利用“生成方法存根向导”来写出...
  • wangpancom
  • wangpancom
  • 2007年02月06日 19:43
  • 544

C#中正则表达式的简单使用介绍

正则元字符   在说正则表达式之前我们先来看看通配符,我想通配符大家都用过。通配符主要有星号(*)和问号(?),用来模糊搜索文件。winodws中我们常会使用搜索来查找一些文件。如:*.jpg,XX...
  • qinzhenhua100
  • qinzhenhua100
  • 2017年03月26日 10:36
  • 797

Visual Studio 2005 Express Editions 免费下载

   从现在开始到2006年11月7日内只要你下载了下列文件就可以享受终身免费的待遇,速度还可以哦!下面的每个文件中都有SQL server 2005!如下你下载了任意一个就没有必要再去下载SQL了下...
  • hfly2005
  • hfly2005
  • 2006年01月05日 13:30
  • 1730

Visual Studio 2005 各种版本的详细比较

Visual Studio 2005 Product Line OverviewFeatureExpress productsVisual Studio Standard EditionVisual ...
  • yezie
  • yezie
  • 2005年12月03日 17:22
  • 4599

c++学习笔记(1)——环境搭建、经典教程推荐及 Visual Studio 2005/2008中如何编译和运行C++程序

之前一直用C编程可是对C++并不了解,决定学习C++,今天是入门第一天:搭建了编译环境和写了第一个helloworld的程序 (1)使用的软件:Visual Studio 2008(中文版)。    ...
  • zhenzhen90
  • zhenzhen90
  • 2013年08月16日 17:21
  • 1453

Visual Studio使用正则表达式查找和替换

Visual Studio自带的“查找和替换”功能在编程时会常常用到,tongg
  • acsder2010413
  • acsder2010413
  • 2014年09月30日 12:58
  • 1275
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Visual C# 2005中使用正则表达式
举报原因:
原因补充:

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