Perl正则表达式

所需积分/C币:10 2014-03-07 18:03:11 119KB PDF
10
收藏 收藏
举报

对于perl不是很了解的同学们可以看看,这个还是蛮有效果的
例1:/^def只匹配以def打头的字符申,Sdef只匹配以def结尾的字符串,结合起来的/de 只匹配字符串def(?)。A和Z在多行匹配时与^和S不同。 例2:检验变量名的类型 if(varname =x/$[A-Za-z[0-9a-zA-Z]*/& print("Svarname is a legal scalar variablein") } elsif( Svarname=八@[A-Za-z0-9a-zA-∠]米$/){ print("Svarname is a legal array variablen") 3 elsif (Svarname -x [A-Za-z0-9a-zA-Z*S/)i print ("Svarname is a legal file variable"); print ("I dont understand what Svarname is n") 例3:b在单词边界匹配:bde配def和 defghi等以def打头的单词,但不配 abedef c defb兀配def和 abcdef等以def结尾的单词,但不匹配 defghi,^ bdefb/只匹配字符串defe 注意:∧bdf可匹配$ donghi,因为$)不被看作是单词的部分。 例4:B在单词内部匹配: ABdel匹配 abcdef等,但不匹配def;/defB/匹配 defghi等; ABdefe 匹配cdeg、 abcdefghi等,但不匹配def; defghi, abcdef 3.7模式中的变量替换 将句子分成单词 Spattern-Nit]+ @words- split(/Pattern/, Sline); 3.8字符范围转义 E转义宁符描述范围 d仟意数字[0-9] D)除数字外的任意字符[^0-9] w任意单词字符[0-9aA刁 W任意非单词字符[^0-9azA-Z s空自[rtnf S非空白[^rtnf 例:daz匹配任意数字或小写字母。 39匹配任意字符 字符""匹配除换行外的所有字符,通常与*合用。 310匹配指定数目的字符 字符对{指定所匹配字符的出现次数。如:de{1,3}f匹配def,deef和def;:de{3}f 匹配de:;de3,}f配不少于3个e在d和f之间;/de{0,3}f配不多于3个e在d和f 之间。 3.11指定选项 字符"指定两个或多个选择来匹配模式。如:/ def ghi/匹配def或ghi 例:检验数字表示合法性 if (Snumber =/A-?d+$ -?[xX][da-f a-F]+S/)i print("Snumber is a legal integer n") f else i print("Snumber is not a legal integern); 其中^?d$匹配十进制数字,~?0[xX]daa甲]+$匹配十六进制数字 12、模式的部分重用 当模式中匹配相同的部分出现多次时,可用括号括起米,用n米多次引用,以简化表达式: ∧d{2}(W])d{2}ld{2}匹配: 12-05-92 26.11.87 070492等 注意:∧d{2}([W])d{2}ld{2}不同于/(d{2})w)2/,后者只匹配形如17-17-17的 字符串,而不匹配17-05-91等 13、转义和特定字符的执行次序 象操作符一样,转义和特定字符也有执行次序: 特殊字符描述 模式内存 +*?{}出现次数 ^$bB锚 选项 14、指定模式定界符 缺省的,模式定界符为反斜线′,但其可用字母m白行指定,如 m!/ u/jqpublic/perl/prog1!等价于∧ uvjqpubliciperl/prog1 注:当用字母作为定界符时,不做变量替换;当用特殊字符作为定界符时,其转义功能或特 殊功能即不能使用 15、模式次序变量 在模式匹配后调用重用部分的结果可用变量Sn,全部的结果用变量$&。 Sstring= This string contains the numbcr 25.11. Sstring=~/-?(d+).?(d+)/;#匹配结果为25.11 Sintegerpart=Sl; now Sintegerpart 25 Sdecimalpart=$2; now Sdecimalpart=11 Stotalpart=S&, now totalpart= 25.11 四、模式匹配选项 选项描述 g匹配所有可能的模式 i忽略大小写 m将串视为多行 o只赋值一次 s将串视为单行 ⅹ忽略模式中的空白 、匹配所有可能的模式(g选项 @matches="balata"=x/a/g;#now @matches=("ba","la,"ta) 匹配的循环: while("balata =x/a/g)& Smatch=s& print("smatch n) 结果为: la 当使用了选项g时,可用函数pos来控制下次匹配的偏移 Offset=pos( Ss pos(Sstring)- Snewoffset 2、忽略大小写〔选项)例 /de/i匹配de,dE,De和DE 3、将字符串看作多行(m选项 在比情况下,^符号匹配字符串的起始或新的一行的起始;$符号匹配任意行的末尾。 4、只执行一次变量替换例 var SIir while(svar <10)3 Result= slil Ine 每次均匹配/。 5、将字符串看作单行例 /a.*bcs匹配字符串 xxxxx \nxxxxbc,但a.*bc/则不匹配该字符串。 6、在模式中忽略空格 ∧d{2}(w])d{2}Ⅵld{2}/x等价于∧d{2}(Wd{2}Ild{2} 五、替换操作符 语法为s/ pattern/replacement,其效果为将字符串中与 pattern匹配的部分换成 replacement Sstring="abc123def' Sstring S/123/456/; now Sstring=abc456def' 在替换部分可使用模式次序变量$,如s(d)[$卬,但在替换部分不文持模式的特殊宇符, 如{},*,等,如s/abc[def将把abc替换为def 替换操作符的选项如下表: 选项描述 g改变模式中的所有匹配 忽略模式中的人小写 c替换字符串作为表达式 m将待匹配串视为多行 o仅赋值一次 s将待匹配串视为单行 ⅹ忽略模式中的空白 注:ε选项把替换部分的字符串看作表达式,在替换之前宄计算其值,如: Sstring="Oabcl Sstring =n S/Ta-ZA-Z1/&x 2/e; now Sstring="Oabcabcl 六、翻译操作符 这是另一和替換方式,诘法如:r/ stringl/ string2/。同样, string2为替换部分,但其效果是 把 string 1中的第一个字符替换为 string2中的第一个字符,把 string1中的第二个字符替换 为 string2中的第二个字符,依此类推。如: Sstring="abcdefghi Sstring=tr/abc/def/; now string="defdefghifed 当 string 1比 string2长时,其多余字符替换为 string2的最后一个字符;当 string1中同一个 字符出现多次时,将使用第一个膂换字符。 翻译操作符的选项如下: 选项描述 c翻译所有未指定字符 d删除所有指定字符 s把多个相同的输出字符缩成个 如 Sstring=~tr∧de;把所有非数字字符替换为空格。 Sstring=trLd;删除tab和空格; Sstring=tr/0-9//s;把数字间的其它字符替换为一个空格。 七、扩展模式匹配 PERL支持PERL4和标准UNX模式匹配操作所没有的一些模式匹配能力。其语法为: ( pattern),其中c是一个字符, pattern是起作用的模式或子模式 1、不存贮括号内的匹配内容 在PERL的模式中,括号内的子模式将存贮在内存中,此功能即取消有贮该括号内的匹配 内容,如(? a bc(de)f1/中的表示已匹配的d或e,而不是a或b或c 2、内嵌模式选项 通常模式选项置于其后,有四个选项:i、m、s、ⅹ可以内嵌使用,语法为:/(? option) pattcrn/, 夺价于 pattern/option 3、肯定的和否定的预见匹配 肯定的预见匹配语泫为/ pattern(?= string),其意义为匹配后面为 string的模式,相反的, (?! string)意义为匹配后面非 string的模式,如 Sstring=25abc8", Sstring =/abc(?=[0-9) Snatched=S&;#$&为凵匹配的模式,此处为abc,而不是abc8 4、模式注释 PERL5中可以在模式中用?#来加注祥,如: ir(Sstring =x/?i[a-z]22,3(?# match two or three alphabetic characters)/i

...展开详情
试读 8P Perl正则表达式
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
Perl正则表达式 10积分/C币 立即下载
1/8
Perl正则表达式第1页
Perl正则表达式第2页

试读结束, 可继续读1页

10积分/C币 立即下载