perl第6章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第六章正则表达式和模式匹配刘融华中农业大学生物信息中心正则表达式的定义正则表达示(regularexpression),在Perl中也可以称之为模式(pattern),即用来表示某个字符串的特征模板。它本身是一种微型编程语言,可以内嵌到其他编程语言中。正则表达式的任务给定一个模式,判断目标字符串是否与之匹配。正则表达式的应用用于linux系统下的文件名或文本匹配(sed,awk,grep)用于程序员文本编辑器(vi,emacs)用于Web上的搜索引擎(Yahoo,Google)用于电子邮件客户端……简单模式最简单的情况HelloWorld=~/World/;“HelloWorld”为目标字符串;World为regexp;=~为操作符,联系regexp和字符串用于条件控制结构if(HelloWorld=~/World/){printItmatches\n;}else{printItdoesn'tmatch\n;}利用!~操作符变换上述结果if(HelloWorld!~/World/){printItdoesn'tmatch\n;}else{printItmatches\n;}regexp可被变量取代$greeting=World;if(HelloWorld=~/$greeting/){printItmatches\n;}else{printItdoesn'tmatch\n;}如果查询目标为$_,$_=~可省略$_=HelloWorld;if(/World/){printItmatches\n;}//为默认定界符,可被任何定界符取代,但前面需加字符m“HelloWorld”=~m!World!;“HelloWorld”=~m{World};“/usr/bin/perl”=~m“/perl”;变量内插$foo='house';'housecat'=~/$foo/;'cathouse'=~/cat$foo/;‘housecat’=~/${foo}cat/;不同的regexp与“HelloWorld”匹配“HelloWorld”=~/world/;“HelloWorld”=~/oW/;“HelloWorld”=~/oW/;“HelloWorld”=~/World/;假如字符串有多个regexp匹配,选择先出现的匹配“HelloWorld”=~/o/;#matches'o'in'Hello'“Thathatisred”=~/hat/;#matches'hat'in'That'grep的简单实施元字符元字符(metacharacter)即在正则表达式中有特殊意义的字符,若要元字符表现为它原来的形式,需要用到转义符\。常见元字符包括:{}[]()^$.|*+?\/“2+2=4”=~/2+2/;“2+2=4”=~/2\+2/;“Theintervalis[0,1).”=~/[0,1)./“Theintervalis[0,1).”=~/\[0,1\)\./“#!/usr/bin/perl”=~/#!\/usr\/bin\/perl/;‘C:\WIN32’=~/C:\\WIN/;锚位元字符符号^表示与字符串开始部分进行匹配,符号$表示与字符串末尾部分进行匹配housekeeper=~/keeper/;#matcheshousekeeper=~/^keeper/;#doesn'tmatchhousekeeper=~/keeper$/;#matches符号^和$同时使用,需满足上述两个条件,一个特例就是匹配整个字符串keeper=~/^keep$/;#doesn'tmatchkeeper=~/^keeper$/;#matches=~/^$/;#matchesanemptystring通过以下查询名为bert的例子,显示同时使用符号^和$进行匹配的好处另一种简易办法:$stringeq‘bert’字符类匹配字符类进行匹配时,考虑的是可能字符的集合,而非单个字符。字符类用[…]表示,其中包含的所有字符均为备选。/cat/;#matches'cat'/[bcr]at/;#matches'bat,'cat',or'rat'/item[0123456789]/;#matches'item0'or...or'item9'“abc”=~/[cab]/;#matches‘a’注意顺序/[yY][eE][sS]/;#match'yes','Yes','YES',etc.字符类匹配中用到以下特殊符号时需要转义操作-:范围操作符]:字符类操作符\:转义操作符^:锚位操作符$:标量变量或锚位操作符转义],$,\的示例:/[\]c]def/;#matches']def'or'cdef'$x='bcr';/[$x]at/;#matches'bat','cat',or'rat'/[\$x]at/;#matches'$at'or'xat'/[\\$x]at/;#matches'\at','bat,'cat',or'rat'字符类中的范围操作符:-/item[0-9]/;#matches'item0'or...or'item9'/[0-9bx-z]aa/;#matches‘0aa’,...,‘9aa’,‘baa’,#'xaa','yaa',or'zaa'/[0-9a-fA-F]/;#matchesahexadecimaldigit字符类中的非操作符:^/[^a]at/;#doesn'tmatch'aat',butmatches#allother'bat','cat,'0at','%at',etc./[^0-9]/;#matchesanon-numericcharacter/[a^]at/;#matches‘aat’or‘^at’字符类的简写/\d\d:\d\d:\d\d/;#matchesahh:mm:sstimeformat/[\d\s]/;#matchesanydigitorwhitespacecharacter/\w\W\w/;#matchesawordchar,followedbya#non-wordchar,followedbyawordchar/..rt/;#matchesanytwochars,followedby'rt'/end\./;#matches'end.'/end[.]/;#samething,matches'end.'单词锚位操作符:\b$x=Housecatcatenateshouseandcat;$x=~/cat/;#matchescatin'housecat'$x=~/\bcat/;#matchescatin'catenates'$x=~/cat\b/;#matchescatin'housecat'$x=~/\bcat\b/;#matches'cat'atendofstring选择性匹配操作符:|catsanddogs=~/cat|dog|bird/;#matchescatcatsanddogs=~/dog|cat|bird/;#matchescatcats=~/c|ca|cat|cats/;#matchesccats=~/cats|cat|ca|c/;#matchescatscab=~/a|b|c/#matchesc,/a|b|c/==/[abc]/匹配任何字符:/s默认情况下,点(.)不匹配换行符。如果字符串中有换行符,并希望(.)匹配它们,那么可以使用/s这个修饰符。分组元字符假设试图查找housecats或housekeepers,使用housecat|housekeeper可以达到要求,但很繁琐,可以使用更加简洁的方式:house(cat|keeper)匹配过程分析抽取匹配元字符()不仅可用于分组,还可用于抽取字符串中被匹配的部分量词元字符主要包括?,*,+,{}最大匹配(或贪婪匹配)贪婪方式:在模式其余部分匹配的前提下,尽可能多地匹配字符。最小匹配和非贪婪量词正则表达式的优先级正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似,大体可以分为以下五个级别:替换操作符替换操作符s///是一种可以更换一些文本的匹配运算符,该运算符基本形式是:s/PATTERN/REPLACEMENT/转换操作符转换操作符tr///的作用与替换运算符类似,但它并不使用正则表达式,而且它的运行方式完全不同。转换操作符的句法如下所示:tr/searchment/repalcement/;该操作把searchment的第一个字符换成replacement的第一个字符,searchment的第二个字符换成replacement的第二个字符,以此类推。

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功