正则表达式之道
【程序编程相关:用GCC编译程序】原著:steve mansour 【推荐阅读:消息中间件和JMS】
【扩展信息:Web MVC框架的三种类型】sman@scruznet.com revised: june 5, 1999 (copied by jm /at/ jmason.org from http://www.scruz.net/%7esman/regexp.htm, after the original disappeared! )翻译:neo lee
neo.lee@gmail.com 2004年10月16日英文版原文
译者按:原文因为年代久远,文中很多链接早已过期(主要是关于vi.sed等工具的介绍与手册),本译文中已将此类链接删除,如需检查这些链接可以查看上面链接的原文.除此之外基本照原文直译,括号中有“译者按”的部分是译者补充的说明.如有内容方面的问题请直接与steve mansor联系,当然,如果你只写中文,也可以与我联系.
目 录
什么是正则表达式
范例 简单 中级(神奇的咒语) 困难(不可思议的象形文字) 不同工具中的正则表达式什么是正则表达式
一个正则表达式,就是用某种模式去匹配一类字符串的一个公式.很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的,而且,一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作压缩在几分钟(甚至几秒钟)内完成.正则表达式被各种文本编辑软件.类库(例如rogue wave的tools.h++).脚本工具(像awk/grep/sed)广泛的支持,而且像microsoft的visual c++这种交互式ide也开始支持它了.我们将在如下的章节中利用一些例子来解释正则表达式的用法,绝大部分的例子是基于vi中的文本替换命令与grep文件搜索命令来书写的,不过它们都是比较典型的例子,其中的概念可以在sed.awk.perl与其他支持正则表达式的编程语言中使用.你可以看看不同工具中的正则表达式这一节,其中有一些在别的工具中使用正则表达式的例子.还有一个关于vi中文本替换命令(s)的简单说明附在文后供参考.
正则表达式基础
正则表达式由一些普通字符与一些元字符(metacharacters)组成.普通字符包括大小写的字母与数字,而元字符则具有特殊的含义,我们下面会给予解释.在最简单的情况下,一个正则表达式看上去就是一个普通的查找串.例如,正则表达式"testing"中没有包含任何元字符,,它可以匹配"testing"与"123testing"等字符串,但是不能匹配"testing".
要想真正的用好正则表达式,正确的理解元字符是最重要的事情.下表列出了所有的元字符与对它们的一个简短的描述.
元字符
描述
.
匹配任何单个字符.例如正则表达式r.t匹配这些字符串:rat.rut.r t,但是不匹配root.
$
匹配行结束符.... 下一页