正则式完成模式匹配和文本操作

ZDNet软件频道 时间:2004-04-19 作者:Builder.com |  我要评论()
本文关键词:
正则表达式是根值于UNIX脚本中一个功能很强的特性。正则表达式在文本处理和模式匹配方面具有强大功能,其它语言也同样采用了正则表达式。
本文译自Builder.com,未经许可请勿转载

正则表达式是根值于UNIX脚本中一个功能很强的特性。由于正则表达式在文本处理和模式匹配方面具有强大功能,其它语言也同样采用了正则表达式。

由于HTTP传输一般都是以文本字符串格式进行的,采用正则表达式就显得更加的有利了。同时,由于正则表达式所耗费资源小的特点,使得它成为在构建一个子程序时进行数据验证的一个必要工具。

你可以通过使用“/”作为分隔符,将表达式包括在中间。这种正则表达式其实是由一组字符和元字符组成,它们是用于描述你所搜寻的文本。

这里有个例子,这是我使用的一个比较普遍的正则表达式:

/^d-d-d/

这个正则表达式是与如“2003-01-01”这样的日期格式相匹配的。大多情况下,你可以从左至右的读这些正则表达式,从而对其样式进行解码。这个表达式的意思是:寻找这样一个模式,在此字符串头四位是4个十进制数(用表示),然后接着是一个分隔符(用-表示),接着是两位十进制数(用d表示),接下来又是一个分隔符(用-表示),最后是两位十进制数(用d表示)。

正则表达式并不受他们的模式规范的限制。例如,我也可以将上面这个例子写成以下这种形式:

/^[0-9]-[0-9]-[0-9]/

如果你写出正则表达式,你就必须对模式的概念以及元字符的表示法有很好的了解。下面列出了一些重要的元字符和他们的表示法/功能:

( and ) —组合一个子搜索,并为子匹配创建返回引用。

  • [ and ]—包含一组和法(或不合法)的字符。
  • { and }—当特定搜索表达式执行的时候创建一个环境
  • .—匹配任何字符
  • ^--指定所搜索的文本的开头
  • l $--指定所搜索的文本的结尾
  • *--匹配一个字符或表达式,也可以不匹配
  • +--对一个字符或表达式至少进行一次匹配
  • --这个占位符可以根据后面的字符来给予不同的含义。

    我们假设你要根据一特殊要求页对一个Web页面进行重新发布。一个HTTP客户端(可能是一个浏览器)对你的Web服务器发出一个请求,通过发出GET请求来寻找地址为http://www.yoursite.com/2003_05_01_article.html的页面。但是有时候,你会整理你的网络服务器,并将上述页面中的文章移至http://www.yoursite.com/articles/2003/05/01.html中。这时,当客户端发出访问请求的话,你就需要将其重新定位到新地址。

    创建模式匹配的关键就是认识到什么是你想要得到的。当一个请求到达时,你就要保证这个请求具有精确的格式。

    对于整个URL,它将是主机地址(http://www.yoursite.com),然后加一个斜杠(/),接下来是年份(2003),然后是下划线(_),接着是月份(05),等等。你如果对页面名字中的日期特别的感兴趣。下面就是对应的完整的正则表达式:

    /(.*)/(d)_(d)_(d).*.(.*)/

    从左到右,这个表达式的意思是:为以后的引用对任何事物进行匹配,也可不进行匹配,后面是斜杠(/),接下来是用于以后引用的4个十进制数((d)),接下来是下划线(_),然后是两位十进制数((d)),接下来又是一个下划线(_),接着又是两位十进制数((d)),接下来后面可以接任何东西,也可以不接(.*),再后面是一个句点,此举点后面也可以接任何东西或是不接((.*))。

    当你引用组合子匹配的时候,你一般是使用-$n进行回调用。一般是代表你搜索的文本,是代表第一个子匹配,是代表第二个子匹配,以此类推。

    我们就可以获取原有的URL并用“/articles///.”来进行替换,这样我们就可以创建一个新的URL。他先进行第一次回调用(),并用第一个匹配(http://www.yoursite.com)对其进行替换。而第二次回调用就用第二个匹配(2003)来进行替换,以此类推。

    正如你所见,正则表达式为执行复杂的模式匹配和进行文本操作提供了一个功能强大的工具。



    责任编辑:李宁

    欢迎评论投稿

  • 百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
    中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
    京公网安备:1101082134