摘要:正则表达式是一种处理文本的有用工具。无论是验证用户输入、搜索字符串内的模式、还是以各种有效方式重新设置文本格式,正则表达式都非常有用。下载本文的源代码。
引言
Microsoft®.NET Framework 对正则表达式的支持是一流的,甚至在 Microsoft® ASP.NET 中也有依赖正则表达式语言的控件。本文介绍了深入学习正则表达式的基础知识和推荐内容。
本文主要面向对正则表达式知之甚少或没有使用经验,但却熟悉 ASP.NET、可借助 .NET 编程的初学者。此外,希望本文连同 regular expression cheat sheet 成为有正则表达式使用经验的开发者的手头参考资料或进修资料。本文讨论内容如下:
1.
正则表达式使用历史简介
2.
简单表达式
3.
限定符
4.
元字符
5.
字符类
6.
预定义的集合元字符
7.
表达式示例详细内容
8.
ASP.NET 中的验证
9.
正则表达式 API
10.
免费工具
11.
高级主题概述
12.
小结和其他资源
通常,如果对本文或对正则表达式有疑问,请访问 ,通过 regex mailing list 提出问题。编写此文时其中已有 350 多个订户参与。
正则表达式使用历史简介正则表达式设计于五十年代,存在至今。正则表达式最初用于描述“正则集”,它们是一些神经生理学家研究的模式。正则表达式最早由数学家 Stephen Kleene 提出,最终由 Ken Thompson 在两种非常流行的文本实用程序 qed 和 grep 中使用。Jeffrey Friedl 在其著作“Mastering Regular Expressions (2nd edition)”中对此作了进一步阐述。建议那些希望更多了解正则表达式理论和历史的人看看这本书。
在最近的五十年中,正则表达式逐渐从模糊深奥的数学概念发展为在各类工具和软件包中应用的主要功能。尽管数十年来很多 UNIX 工具都支持正则表达式,但仅仅是近十年来,它才在大部分 Windows 开发者工具包中得到体现。在 Microsoft® Visual Basic® 6 或 Microsoft® VBScript 中,即使情况理想,正则表达式仍难以使用。但随着.NET Framework 的推行,正则表达式的支持发展到极点,所有 Microsoft 开发者和所有 .NET 语言都可以使用正则表达式。
那么,正则表达式究竟是什么呢?正则表达式是一种语言,它可以明确描述文本字符串中的模式。除了简单描述这些模式之外,正则表达式引擎通常可用于遍历匹配,并使用模式作为分隔符来将字符串解析为子字符串,或以智能方式替换文本或重新设置文本格式。正则表达式为解决与文本处理有关的许多常见任务提供了有效而简捷的方式。
在讨论正则表达式时,通常以正则表达式匹配(或不匹配)的文本为基础分析正则表达式。本文(以及 System.Text.RegularExpressions 类)将在正则表达式交互操作中引用 3 个参与对象:正则表达式的“模式”、“输入”字符串和字符串内的所有模式的“匹配”。
简单表达式最简单的正则表达式大家都已熟悉,即文字字符串。特定的字符串可通过文字本身加以描述;像 foo 这样的正则表达式模式可精确匹配输入的字符串 foo。在本例中,也将匹配如下输入:The food was quite tasty,如果希望精确匹配,这可能不是预期结果。
当然,使用正则表达式匹配等于它自身的精确字符串是没有价值的实现,不能体现正则表达式的真正作用。假如不查找 foo,而是查找以字母 f 开头的所有单词,或所有 3 个字母的单词,那该怎么办?目前,这超出了文字字符串的合理范围。我们需要更加深入地研究正则表达式。下面是一个文字表达式示例及一些匹配的输入。
模式 输入(匹配)foo
foo、food、foot、“There's evil afoot.”
限定符
限定符提供了一种简单方法,用于指定在模式中允许特定字符或字符集自身重复出现的次数。有 3 个非显式限定符:
1.
*,描述“出现 0 或多次”。
2.
+,描述“出现 1 或多次”。
3.
?,描述“出现 0 或 1 次”。