资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2010-5-13,#,Perl,技巧分享,Perl,以及正则在,Perl,中的应用,By,小亮,寒暄,此处省略大约一千八百余字,这里可以鼓掌了,谢谢,如何在,windows,下使用,cpan,一分钟学会,perl,$,%,for/foreach,while,open,print,my words=(a,b,c);,foreach(words),print;,Perldoc f for,Search.cpan.org,常用简写,while()print if/Norma/;,$x=1;print$x+,n until$x=5;,alpha=(a.z,n);print foreach alpha;,注释的方法,1.,标准方法:,#,2.,=for comment Commented text =cut,3.,C+;/*This is a comment.C+style!*/,Perl,日常用途,读取文件,进行文本处理,Open DH,”xxx.txt”,抓取页面,然后进行文本处理,-,lwp,配合其他程序,对结果进行文本处理,Netstat an|findstr“:80”|perl e“while()$i+print$i”,示例,正则,什么是正则,Hello,202.138.32.34,正则的三种模式,匹配:,m/,(还可以简写为,/,,略去,m,),替换:,s/,转化:,tr/,修饰词含义,/i,忽略字母大小写,/m,令,和,$,匹配随后嵌入的,n,。,/s,令,.,匹配换行符并且忽略废弃了的,$*,。,/x,或略(大多数)空白并且允许在模式里的注释,/o,只编译模式一次,/g,全局地查找所有匹配,s,模式和,m,模式的区别:,s:/e,把右边当作一个表达式计算,m:/cg,在,/g,匹配失败后允许继续查找,正则,-,选择自己的分隔符,s(egg);,slarvapupa;,spupa/imago/;,s!aaa!bbb!;,saaabbb;,正则量词,量词原子性 含义,*否 匹配,0,或者更多次数(最大)。,+,否 匹配 或者更多次数(最大)。,?,否 匹配,1,或者,0,次(最大)。,COUNT,否 匹配,COUNT,次,MIN,否 匹配至少,MIN,次(最大)。,MIN,MAX,否 匹配至少,MIN,次但不超过,MAX,次(最大),*,?,否 匹配,0,或者更多次(最小),+?,否 匹配,1,或者更多次(最小),MIN,?,否 匹配最多,MIN,次(最小),MIN,MAX?,否 匹配至少,MIN,次但不超过,MAX,次(最小),扩展的正则序列,(?#.),否 注释,抛弃,(?:.),是 只集群,不捕获的圆括弧,(?imsx-imsx),否 打开,/,关闭模式修饰词,(?imsx-imsx:.),是 集群圆括弧加修饰词,(?=.),否 如果前向查找断言成功,返回真,(?!.),否 如果前向查找断言失败,返回真,(?.),是 匹配未反向跟踪的子模式,(?.),否 执行嵌入的,Perl,代码,(?.),是 匹配来自嵌入,Perl,代码。,正则的例子,*(?:)*,前半部分用来匹配,后半部分用来匹配单独的,匹配类似,匹配注释,匹配注释中的,/,考虑分号,或者一行的开始,(?!http:)/,匹配,http:/,正则的例子,-2,Perl,逐字匹配,perl-e$x=vvvvvvv;while($x=/v(?=vv)/g)print 1,Perl,匹配,非,!叹号,perl,-eprintaaa,http:/aaaa,=m(?,Perl,匹配多行,my($want_str)=$k=msm;,正则的例子,-3,$x=1;print$x+,n until$x=5;,alpha=(a.z,n);print foreach alpha;,正则的例子,-4,问题:,你想找到第,N,个,fish.,比如,想找到第三个“,fish,”,字串:,One fish two fish red fish blue fish,解决方法,第一种,使用,/g,模式,配合,while,计数,:,$WANT=3;$count=0;while(/(w+)s+fishb/gi)if(+$count=$WANT)print The third fish is a$1 one.n;#Warning:dont last out of this loop ,The third fish is a red one.,或者选择下面这种奇妙的方式,:,/(?:w+s+fishs+)2(w+)s+fish/i;,正则的例子,-5,#,简单的使用,while$count=0;while($string=/PAT/g)$count+;#or whatever youd like to do here#,高端的用法,$count=0;$count+while$string=/PAT/g;#,或者,forfor($count=0;$string=/PAT/g;$count+),正则的例子,-6,匹配大于,15,的数字,my$string=11,13,17,22,101,33,001,003,0010,001000,15.5,171.77;,while($string=/0*(1-9d2,|16-9|2-9d).?d*/g),print$,例,6-2,my$string=11,13,17,22,101,33,001,003,0010,001000,15.5,171.77;,my result=split(/,/,$string);,map print$_.,”if$_16 (sort$a$b result);,阅读源码,别人的代码,知道或不知道功能。理解每段的含义。,谢谢,
展开阅读全文