正则表达式

本文详细介绍了正则表达式在.NET环境中的使用,特别是C#中的应用。正则表达式是一种强大的文本处理工具,可用于字符串定位、格式转换等多种任务。.NET Framework提供了System.Text.RegularExpressions命名空间支持正则表达式。文章讲解了正则表达式的概念、模式构建、元字符、转义序列,以及如何使用.NET类进行匹配和搜索操作。文中还通过实例展示了如何提取URI的各个元素,强调了正则表达式在处理字符串时的高效性,并提到了Span<T>在处理大字符串时的内存优势。
摘要由CSDN通过智能技术生成

正则表达式作为小型技术领域的一部分,在各种程序中都有着难以置信的作用。正则表达式可以看成一种有特定功能的小型编程语言:在大的字符串表达式中定位子字符串。它不是一种新技术,最初是在UNIX环境中开发的,与Perl和JavaScript编程语言一起使用的比较多。System.Text.RegularExpressions名称空间中的许多.Net类都支持正则表达式。.Net Framework的各个部分也使用正则表达式。例如,在ASP.NET验证服务器的控件中就使用了正则表达式。

对不太熟悉正则表达式语言的开发者来说,下面将主要解释正则表达式和相关的.Net类。

注:.Net正则表达式引擎用于兼容Perl 5的正则表达式,但它有一些新功能。

概述

正则表达式语言是一种专门用于字符串处理的语言。它包含两个功能:

  •  一组用于标识特殊字符类型的转义代码。你可能熟悉DOS命令中的使用*字符表示任意子字符串(例如,DOS命令 Dir Re*会列出名称以Re开头的所有文件)。正则表达式使用与*类似的许多序列来表示“任意一个字符”、“一个单词的中断”和“一个可选的字符”等。
  •  一个系统,在搜索操作中把子字符串和中间结果的各个部分组合起来。

使用正则表达式,可以对字符串执行许多复杂而高级的操作,例如:

  • 识别(可以是标记或删除)字符串中的所有重复单词,例如,把“The computer books books”转换为“The computer books”。
  • 把所有单词都转换为标题格式,例如,把“this is a Title”转换为“This Is A Titlte”。
  • 把长于3个字符的所有单词都转换为标题格式,例如,把"this is a Title"转换为"This is a Title"。
  • 确保句子有正确的大写形式。
  • 区分URI的各个元素(例如,给定http://www.wrox.com,提取出其中的协议、计算机名和文件名等)。

当然,这些都是可以在C#中用System.String和System.Text.StringBuilder的各种方法执行的任务。但是,在一些情况下,还需要编写相当多的C#代码。如果使用正则表达式,这些代码一般可以压缩为几行。实际上,这是实例化了一个对象System.Text.RegularExpressions.Regex(甚至更简单,调用Regex的静态方法),给它传递要处理的字符串和一个正则表达式(这是一个字符串,它包含用正则表达式语言编写的指令)。

正则表达式字符串初看起来像一般的字符串,但其中包含了转移序列和有特定含义的其他字符。例如,序列\b表示一个字的开头和结尾(字的边界),因此如果要表示正在查找以字符th开头的字,就可以编写正则表达式\bth(即字边界是序列-t-h)。如果要搜索所有以th结尾的单词,就可以编写th\b(字边界是序列t-h-)。但是,正则表达式要比这复杂的多,包括可以在搜索操作中找到存储部分文本的工具性程序。这里仅简要介绍正则表达式的功能。

假定应用程序需要把美国的电话号码转换为国际格式。在美国,电话号码的格式为314-123-1234,常常写作(314)123-1234。在把这个国家格式转换为国际格式时,必须在电话号码的前面加上+1(美国的国家代码),并给区号加上圆括号:+1(314) 123-1234。在查找和替换时,这并不复杂。但如果要使用String类完成这个转换,就需要编写一些代码。而正则表达式语言可以构造一个短的字符串来表达上述含义。

这里实例是一个非常简单的示例,只考虑如何查找字符串中的某些子字符串,不需要考虑如何修改他们。

public static void Find1(text)
{
 const string pattern = "ion";
 MatchCollection matches = Regex.Matches(text,pattern,RegexOptions.IgnoreCase|RegexOptions.ExplicitCapture);
 WriteMatches(text,matches);//此为后面编写的一个输出匹配结果的方法


}

为了说明.Net类的正则表达式,我们先进行一次纯文本的基本搜索,这次搜索不带任何转义序列或正则表达式命令。假定要查找所有的字符串ion,把这个搜索字符串称为模式。

在这段代码中,使用了System.Text.RegularExpressions名称空间中的Regex类的静态方法Matches()。这个方法的参数是一些输入文本、一个模式和从RegexOptions枚举中提出的一组可选标志。在本例中,指定所有的搜索都不应区分大小写。另一个标记ExplicitCapture改变了收集匹配的方式,对于本例,这样可以使搜索的效率更高。Matches()方法返回MatchCollection对象的引用。匹配是一个技术术语,表示在表达式中查找模式实例的结果,用System.Text.RegularExpressions.Match类表示它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值