正则表达式语法:揭开正则表达式语法的神秘面纱来源: 发布时间:星期四, 2009年2月12日 浏览:60次 评论:0
正则表达式(REs)通常被地认为是只有少数人理解种神秘语言在表面上它们确实看起来杂乱无章如果你不知道它语法那么它代码在你眼里只是堆文字垃圾而已实际上正则表达式是非常简单并且可以被理解读完这篇文章后你将会通晓正则表达式通用语法 支持多种平台 正则表达式最早是由数学家Stephen Kleene于1956年提出他是在对自然语言递增研究成果基础上提出来具有完整语法正则表达式使用在格式匹配方面上后来被应用到熔融信息技术领域自从那时起正则表达式经过几个时期发展现在标准已经被ISO(国际标准组织)批准和被Open Group组织认定 正则表达式并非门专用语言但它可用于在个文件或里查找和替代文本种标准它具有两种标准:基本正则表达式(BRE)扩展正则表达式(ERE)ERE包括BRE功能和另外其它概念 许多中都使用了正则表达式包括xsh,egrep,sed,vi以及在UNIX平台下它们可以被很多语言采纳如HTML 和XML这些采纳通常只是整个标准个子集 比你想象还要普通 随着正则表达式移植到交叉平台语言发展这功能也日益完整使用也逐渐广泛网络上搜索引擎使用它e-mail也使用它即使你不是个UNIX员你也可以使用规则语言来简化你而缩短你开发时间 正则表达式101 很多正则表达式语法看起来很相似这是你以前你没有研究过它们通配符是RE个结构类型即重复操作让我们先看看ERE标准最通用基本语法类型为了能够提供具有特定用途范例我将使用几个区别 匹配 正则表达式关键的处在于确定你要搜索匹配东西如果没有这概念Res将毫无用处 每个表达式都包含需要查找指令如表A所示 重复操作符 重复操作符或数量词都描述了查找个特定次数它们常被用于匹配语法以查找多行可参见表B 锚是指它所要匹配格式如图C所示使用它能方便你查找通用合并例如我用vi行编辑器命令:s来代表substitute这命令基本语法是: s/pattern_to_match/pattern_to_substitute/ 间隔 Res中另可便的处是间隔(或插入)符号实际上这符号相当于个OR语句并代表|符号下面语句返回文件sample.txt中“nerd” 和 “merd”句柄: egrep “(n|m)erd” sample.txt 间隔功能非常强大特别是当你寻找文件区别拼写时候但你可以在下面例子得到相同结果: egrep “[nm]erd” sample.txt 当你使用间隔功能和Res高级特性连接在起时它真正用处更能体现出来 些保留 Res最后个最重要特性是保留(也称特定)例如如果你想要查找“ne*rd”和“ni*rd”格式匹配语句“n[ei]*rd”和“neeeeerd” 和 “nieieierd”相符合但并不是你要查找‘*’(星号)是个保留你必须用个反斜线符号来替代它即:“n[ei]\*rd”其它保留包括: ^ (carat) . (period) [ (left bracket} $ (dollar sign) ( (left parenthesis) ) (right parenthesis) | (pipe) * (asterisk) + (plus symbol) ? (question mark) { (left curly bracket, or left brace) \ backslash 旦你把以上这些包括在你搜索中毫无疑问Res变得非常难读比如说以下PHP中eregi搜索引擎代码就很难读了 eregi(\"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$\",$sendto) 你可以看到意图很难把握但如果你抛开保留你常常会地理解代码意思 整理总结 在本文中我们揭开了正则表达式神秘面纱并列出了ERE标准通用语法如果你想阅览Open Group组织规则完整描述你可以参见:Regular Expressions欢迎你在其中讨论区发表你问题或观点 0
相关文章读者评论发表评论 |