perl正则表达式.docxVIP

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

9.3.1原则1正则表达式有三种形式:匹配、替换和转换。在表 9-1 中列有三种正则表达式运算符。接下来对每一个表达式给出详尽解释。匹配:m/regexp/这种形式表明在//内部的正则表达将用于匹配 = ~或 !~左边的标量。为了语法上的简化用/regexp/,略去m。替换:s/regexp/substituteText/这种形式表明正则表达式regexp将被文本 substituteText替换,为了语法的简化用/regexp/substituteText略去s。·转换:tr/charClass/substituteClass/这种形式包含一系列的字符—/charClass—同时把它们替换为substituteClass。注意转换tr并不真正是一个正则表达式,但是对于用正则表达式难于处理的数据常使用它来进行操纵。因此,tr/[0-9]/9876543210.组成1223456789,987654321等字符串。通过使用=~(用英语讲:does,与“进行匹配”同)和!~(英语:doesnt,与“不匹配”同)把这些表达式捆绑到标量上。作为这种类型的例子,下面我们给出六个示例正则表达式及相应的定义:$scalarName =~ s/a/b; # substitute the character a for b, and return true if this can happern$scalarName =~ m/a; # does the scalar $scalarName have an a in it?$scalarName =~ tr/A-Z/a-z/; # translate all capital letter with lower case ones, and return ture if this happens$scalarName !~ s/a/b/; # substitute the character a for b, and return false if this indeed happens.$scalarName !~ m/a/; # does the scalar $scalarName match the character a? Return false if it does.$scalarName !~ tr/0-9/a-j/; # translate the digits for the letters a thru j, and return false if this happens.如果我们输入像 horned toad =~ m/toad/ 这样的代码,则出现图 9-1 所示情况:另外,如果读者正在对特定变量 $_ 进行匹配(读者可能在while循环,map或grep中使用),则可以不用!~和=~。因而,以下所有代码都会合法:my @elemente = ( al , a2 , a3 , a4 , a5 );foreach (@elements) {s/a/b/;}程序使 @elements 等于b1,b2.b3,b4,b5。另外:while($FD) {print if (m/ERBOR/);}打印所有包含 error 字符串的行:if (grep(/pattern/, @lines)) {print the variable /@lines has pattern in it!/n;}打印所有包含模式pattern内容的行,这直接引入下一原则。 9.3.2 原则2正则表达式仅在标量上匹配。注意这里标量的重要性,如果读者试一试如下代码:@arrayName = ( variablel, variable2);@arrayName =~ m/variable/; # looks for variable in the array? No! use grep instead那么@arrayName匹配不成功! @arrayName被Perl解释为2,于是这意味着读者在输入: 2 =~ m/variable/;至少讲这不能给出预想的结果。如果读者想这样做,输人为:grep(m/variable/, @arrayName);该函数通过@arrayName中的每一个元素进行循环,返回(在标量环境中)匹配的次数,同时在数组环境中返回匹配元素的实际列表。 9.3.3 原则3对于给定的模式串,正则表达式只匹配最早出现的匹配项。匹配时缺省一次只匹配或替换一次。这个原则使用称为“回溯”的过程指出如何匹配一个给定的字符串;如果发现了一个局部匹配进而找到使该匹配无效的东西,正则表达式在字符串中“回溯”最小的可能数量,这个数量的字符要保证不丢失任何匹配。对于理解正则表达式正在做什么,这个原则是最有帮

文档评论(0)

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

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

1亿VIP精品文档

相关文档