正则表达式级技巧基本概念实例详解.docVIP

正则表达式级技巧基本概念实例详解.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
正则表达式级技巧基本概念实例详解

正则表达式高级技巧基本概念实例详解 正则表达式高级技巧基本概念实例详解 原文作者:karthik viswanathan 原文链接:crucial concepts behind advanced regular expressions 译者:笨活儿 英文原文来自smashing magazine。由笨活儿翻译。转载请注明出处。 正则表达式(regular expression abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息。它利用约定俗成的字符结构表达式来发生作用。不幸的是,简单的正则表达式对于一些高级运用,功能远远不够。若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式。 本文为您介绍正则表达式的高级技巧。我们筛选出了八个常用的概念,并配上实例解析,每个例子都是满足某种复杂要求的简单写法。如果你对正则的基本概念尚缺乏了解,请先阅读这篇文章,或者这个教程,或者维基条目。 这里的正则语法适用于php,与perl兼容。 1. 贪婪/懒惰 所有能多次限定的正则运算符都是贪婪的。他们尽可能多地匹配目标字符串,也就是说匹配结果会尽可能地长。不幸的是,这种做法并不总是我们想要的。因此,我们添加“懒惰”限定符来解决问题。在各个贪婪运算符后添加“?”能让表达式只匹配尽可能短的长度。另外,修改器“u”也能惰化能多次限定的运算符。理解贪婪与懒惰的区别是运用高级正则表达式的基础。 贪婪操作符 操作符 匹配之前的表达式零次或零次以上。它是一个贪婪操作符。请看下面的例子: 1.preg_match( / h1 . /h1 / h1 这是一个标题。 /h1 2. h1 这是另一个。 /h1 $matches ) 句点(.)能代表除换行符外的任意字符。上面的正则表达式匹配 h1 标签以及标签内的所有内容。它用句点(.)和星号()来匹配标签内的所有内容。匹配结果如下: 1. h1 这是一个标题。 /h1 h1 这是另一个。 /h1 整个字串都被返回。 操作符会连续匹配所有内容—— 甚至包括中间的 h1 闭合标签。因为它是贪婪的,匹配整个字串是符合其利益最大化原则。 懒惰操作符 把上面的式子稍作修改,加上一个问号(?),能让表达式变懒惰: 1./ h1 .? /h1 / 这样它会觉得,只需匹配到第一个 h1 结尾标签就完成任务了。 另一个有着类似属性的贪婪操作符是 {n } 。它代表之前的匹配模式重复n次或n次以上,如果没有加上问号,它会寻找尽可能多的重复次数,加上的话,则会尽可能少重复(当然也就是“重复n次”最少)。 1.# 建立字串 2.$str = hihihi oops hi 3.# 使用贪婪的{n }操作符进行匹配 4.preg_match( /(hi){2 }/ $str $matches ) # matches[0] 将是 hihihi 5.# 使用堕化了的 {n }? 操作符匹配 6.preg_match( /(hi){2 }?/ $str $matches ) # matches[0] 将是 hihi 2. 回返引用(back referencing) 有什么用? 回返引用(back referencing)一般被翻译成“反向引用”、“后向引用”、“向后引用”,个人觉得“回返引用”更为贴切[笨活儿]。它是在正则表达式内部引用之前捕获到的内容的方法。例如,下面这个简单例子的目的是匹配出引号内部的内容: 01.# 建立匹配数组 02.$matches = array() 03. 04.# 建立字串 05.$str = this is a string 06. 07.# 用正则表达式捕捉内容 08.preg_match( /( | ).?( | )/ $str $matches ) 09. 10.# 输出整个匹配字串 11.echo $matches[0] 它会输出: 1. this is a 显然,这并不是我们想要的内容。 这个表达式从开头的双引号开始匹配,遭遇单引号之后就错误地结束了匹配。这是因为表达式里说:(”|’),也就是双引号(”)和单引号(’)均可。要修正这个问题,你可以用到回返引用。表达式1 2 … 9 是对前面已捕获到的各个子内容的编组序号,能作为对这些编组的“指针”而被引用。在此例中,第一个被匹配的引号就由 1 代表。 如何运用? 将上面的例子中,后面的闭合引号替换为1: 1.preg_match( /( | ).?1/ $str $matches

文档评论(0)

6358999 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档