欢迎来到天天文库
浏览记录
ID:17722700
大小:85.00 KB
页数:8页
时间:2018-09-05
《精通正则表达式-基础知识拓展》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、精通正则表达式_基础知识拓展2007-12-2213:37基础知识拓展ExpandingtheFoundation我希望,前面的例子和解释已经帮助读者牢固地打下了正则表达式的基础,也请读者明白,这些例子都很浅显,我们需要掌握的还有很多。语言的差异LinguisticDiversification我已经介绍过大多数版本的egrep支持的正则表达式的特性,这样的特性还有很多,其中一些并不是所有的版本都支持,这个问题留到后面的章节讲解。任何语言中都存在不同的方言和口音,很不幸,正则表达式也一样。情况似乎是
2、,每一种支持正则表达式的语言都提供了自己的“改进”。正则表达式不断发展,但多年的变化也造就了数目众多的正则表达式“流派”(flavor)。我们会在下面的章节中见到各种例子。正则表达式的目标TheGoalofaRegularExpression从最宏观的角度看,一个正则表达式要么能够匹配给定文本(对egrep来说,就是一行文本)中的某些字符,要么不能匹配。在编写正则表达式的时候,我们必须进行权衡:匹配符合要求的文本,同时忽略不符合要求的文本。尽管egrep不关心匹配文本在行中的位置,但对正则表达式的其
3、他应用来说,这个问题却很重要。如果文本是这样:…zipis44272.Ifyouwrite,send$4.95tocoverpostageand…我们只希望找出包含「[0-9]+」的那些行,就不需要关心真正匹配的数字。相反,如果我们需要操作这些数字(例如保存到文件、添加、替换之类——我们会在下一章看到这样的处理),就需要关心确切匹配的那些数字。更多的例子AFewMoreExamples在任何语言中,经验都是非常重要的,所以我会给出更多用正则表达式匹配常用文本结构的例子。编写正则表达式时,按照预期获得
4、成功的匹配要花去一半的工夫,另一半的工夫用来考虑如何忽略那些不符合要求的文本。在实践中,这两方面都非常重要,但是目前我们只关注“获得成功匹配”的方面。即使我没有对这些例子进行最全面彻底的解释,它们仍然能够提供有用的启示。变量名许多程序设计语言都有标识符(identifier,例如变量名)的概念,标识符只包含字母、数字以及下画线,但不能以数字开头。我们可以用「[a-zA-Z_][a-zA-Z_0-9]*」来匹配标识符。第一个字符组匹配可能出现的第一个字符,第二个(包括对应的「*」)匹配余下的字符。如果
5、标识符的长度有限制,例如最长只能是32个字符,又能使用第20页介绍的区间量词「{min,max}」,我们可以用「{0,31}」来替代最后的「*」。引号内的字符串匹配引号内的字符串最简单的办法是使用这个表达式:「"[^"]*"」。两端的引号用来匹配字符串开头和结尾的引号。在这两个引号之间的文本可以包括双引号之外的任何字符。所以我们用「[^"]」来匹配除双引号之外的任何字符,用「*」来表示两个引号之间可以存在任意数目的非双引号字符。关于引号字符串,更有用(也更复杂)的定义是,两端的双引号之间可以出现由反
6、斜线转义的双引号,例如"nail–the–2"x4"–plank"。在后面的章节讲解匹配实际进行的细节时,我们会多次遇到这个例子。美元金额(可能包含小数)「$[0-9]+(.[0-9][0-9])?」是一种匹配美元金额的办法。从整体上看,这个表达式很简单,分为三部分:「$」、「…+」和「(…)?」,可以大致理解为:一个美元符号,然后是一组字符,最后可能还有另一组字符。这里的“字符”指的是数字(一组数字构成一个数值),“另一组字符”是由一个小数点和两位数字构成的。从几个方面来看,这个表达式还
7、很简陋。比如,它只能接受$1000,而无法接受$1,000。它确实能接受可能出现的小数部分,但对于egrep来说意义不大。因为egrep从不关心匹配文字的内容,而只关心是否存在匹配。处理可能出现的小数部分对整个表达式能否匹配并没有影响。但是,如果我们需要找到只包含价格而不含其他字符的行,倒是可以在这个表达式两端加上「^…$」。这样一来,可选的小数部分就变得很重要了,因为在金额数值和换行符之间是否存在小数部分,决定了整个表达式的匹配结果是否存在差异。另外,这个正则表达式还无法匹配‘$.49’。你可能认
8、为把加号换成星号能够解决问题,不过这条路走不通。在这我先卖个关子,答案留待第5章(F194)揭晓。HTTP/HTMLURLWebURL的形式可能有很多种,所以构造一个能够匹配所有形式的URL的正则表达式颇有难度。不过,稍微降低一点要求的话,我们能够用一个相当简单的正则表达式来匹配大多数常见的URL。进行这种检索的原因之一是,我只能大概记得在收到的某封邮件中有一个URL地址,不过一见到它我就能认出来。常见的HTTP/HTMLURL是下面这样的:http://hostna
此文档下载收益归作者所有