正则表达式学习指南(一)----入门简介

来源:互联网 发布:pr视频剪辑软件下载 编辑:程序博客网 时间:2024/04/19 23:55
写在最开始的地方

关于正则表达式的入门文章很多,比如deeerchao的<<30分钟入门正则表达式>>,微软自己的MSDN帮助文档,还有一些翻译文章,以及你能在网上找到的关于正则的电子书等.本文是RegexBuddy的帮助文档翻译文.也许你以前有看过<<深入浅出之正则表达式>>,但是也许你不知道,这篇文章翻译的只是RegexBuddy帮助文档中的Quick Start部分,如果你想对正则有较深一步的了解,我建议你看看本系列的翻译,相信你会对正则有进一步的了解.当然,如果你以前从不了解正则或者刚开始学习,那么deerchao的<<30分钟入门正则表达式>>会是你不错的选择.


正则表达式教程


在本系列教程中,我将告诉你所有你需要知道的内容,使你能够创造功能强大的,高效率的正则表达式.我将从最基本的概念入手,这样,即使你以前从未接触过正则表达式,你也可以跟着这个教程学习.

当然,我们的教程也不会只停留在表面,我会同时介绍一些正则表达式引擎的内部工作原理给你,使你明白为什么会得到这样的执行的结果.这将会帮助你很快的理解:为什么一个特定的正则表达式跟你最初预期的执行结果不一样.当你需要写更复杂的正则的时候,这将节约你大量的猜测和挠头的时间(head scratching).

正则表达式到底是什么?----术语解释


简单的说,一个正则表达式就是一个模式表达式,他描述了一定数量的文本信息.正则的命名来自于数学,这也是正则的理论基础.当然我们不会深入挖掘这段历史.由于很多人(当然也包括我自己)都具有惰性,通常你会发现正则的名字被缩写为regex或者regexp.我自己更倾向于regex,因为这个很容易写出他的复数形式regexes.在这个帮助文件中,正则被打印成regex (红色字体形式).

第一个例子实际上已经是一个具有有效功能的正则了。它是最基本的模式,仅仅匹配字面值的文本regex.一个匹配(match)就是待匹配文本的一部分,或者字符序列的字节,或者字符串.总之,是通过正则处理程序找到的,与表达式相符的内容.

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b   是一种更加复杂的匹配模式.他首先描述了一系列的字母、数字、标点符号、下划线、百分号和连字符,接着是一个"@"符号,后面又跟了一系列的字母、数字和连字符,最后是一个单独的点号和两到四个字母.换句话说,这个模式描述了一个电子邮箱地址.

通过上面的正则表达式,你可以在一个文本文件中找出所有的邮件地址,或者去校验一个给定的字符串是否是一个正确的电子邮箱地址.在这个教程中,我将使用术语"string",来指代正则表达式将要测试的文本内容.我将把他们使用绿色高亮表示出来."string"或者"character string"被程序员用来表示一连串的字符.实践中,你可以在任何环境下使用正则表达式,不论是应用程序直接获取的,或是通过你工作时所使用的编程语言.


不同的正则表达式引擎


一个正则引擎,是一段可以处理正则表达式的程序,可以将给定的正则表达式与特定的字符串进行匹配.通常情况下,引擎是一个大型程序的一部分,你不需要与他直接接触.相反,当你需要的时候应用程序会调用它,来确保正则表达式的正确匹配.

像软件界里的其他软件一样,不同的正则引擎没有完全兼容彼此.这篇教程里,我不可能详细描述每一种正则引擎和他的表达式语法.在这里,我主要关注的是Perl 5里的语法,原因很简单,这种语法是最流行的,理所当然的应该选他.许多最近新出现的正则引擎都很相似,但并不完全相同,而他们都可以被认为是Perl 5的一种扩展或者衍生.比如:开源的PCRE引擎(他被很多工具和编程语言使用,比如PHP),.NET的正则表达式类库,Java JDK在1.4版本以后所包含的正则包(regular expression package).需要指出的是,那些与Perl衍生物(上面提到的)不同的特性,任何时候都是很重要的.


小试身手


你可以很容易的尝试一下下面的内容,通过使用一个支持正则表达式的文本编辑器,例如EditPad Pro.如果你没有这样一个编辑器,你可以下载一款免费的EditPad Pro去尝试一下.EditPad Pro的正则引擎在演示版本里功能齐全.复制粘贴本页面的内容到EditPad Pro里面,作为一个简单的测试.从菜单中选择Search->Show Search Panel.在底部的查找面板中,找到标记着"Search Text"的文本框,输入regex.勾选"Regular expression"复选框,然后点击"Find First"按钮.这是搜索面板最左上角的一个按钮.观察EditPad Pro的正则引擎是如何找到第一个匹配的.单击"Find First"旁的"Next"按钮,找到更多的匹配结果.当查找完所有匹配结果以后,"Next"按钮就会不停的闪烁.

现在,试着使用正则 reg(ular expressions?|ex(p|es)?) 去搜索.这个正则将会找到所有的命名,单数和复数.我已经在这个页面去使用"regex"了.如果我只是使用纯文本搜索,我需要五次搜索.使用正则以后,我们只需要搜索一次.当你使用像 EditPad Pro 这种工具的时候,正则表达式可以节省你很多时间.从"Search"菜单中选择"Count Matches"来观察这个正则表达式在该文件中匹配的次数.

如果你是一个程序员,你的软件将运行的更快,因为即使是一个简单的正则表达式引擎,采用上述正则表达式一次的表现也将优于采用最先进的纯文本搜索算法搜索数据五次的状态。正则表达式也缩短了开发时间。比方说,检查用户的输入信息是否是一个有效的电子邮件地址,用正则表达式引擎只需要一行(例如,在Perl,PHP,Java或.net中)或几行(比如使用PCRE引擎的C)代码.


本人英文水平一般,只是出于对正则的喜爱和分享的精神翻译这篇指南,如果你觉得文章有那些地方翻译的不当,尽管拍砖,我一定会尽全力完善,如果你想助我一臂之力,也请给我站内信息,谢谢.created 20120109edit 20120117count +2author wushuai1346

微笑

原创粉丝点击