加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl字符串处理

发布时间:2020-12-16 00:33:19 所属栏目:大数据 来源:网络整理
导读:?众所周知Perl处理字符串的功能非常强大,Perl(Practical Extraction and Reporting language)处理格式的功能也非常强大,这里我们就开始学习一些Perl的格式和字符串处理。 熟悉其最强大的三个函数:substr、pack、unpack。 1、大小写处理函数 lc(转为小写)
?众所周知Perl处理字符串的功能非常强大,Perl(Practical Extraction and Reporting language)处理格式的功能也非常强大,这里我们就开始学习一些Perl的格式和字符串处理。 熟悉其最强大的三个函数:substr、pack、unpack。 1、大小写处理函数 lc(转为小写) uc(转为大写) 。 $text="zhengwen feng"; $text2=lc $text; $text3=uc $text; print "$text2n"; print "$text3n"; 2、将第一字母变为小写(lcfirst),将第一个字母大写(ucfirst)。 $string="zheng"; $string2=lcfirst $string; $string3=ucfirst $string; print "$string2n"; print "$string3n"; 3、顺序查找string位置(index),逆序查找string位置(rindex)。index在字串中找尋某一子字串的起始位置。 $string="zheng wen feng zheng wen feng"; $position1=index($string,"wen"); $position2=index($string,"wen",10); $position3=rindex($string,"zheng"); $position4=rindex($string,"zheng",10); print "$position1,$position2,$position3,$position4n"; #!/usr/bin/Perl $str="ABCDEFG1234567"; $a="12"; $pos=index($str,$a); print$pos,"n"; [hto@localhost]$./tipind.pl 7 4、获取子串函数substr,功能非常强大,可以直接支持以一个字符串代替字符串的一个子串。 $text="zheng wenfeng 爱 KittyKitty"; $replace_to="爱"; $replace_with="喜欢"; substr($text,index($text,$replace_to),length($replace_to),$replace_with); print "$textn"; 5、字符串中取串长(字符数量)-length #!/usr/bin/Perl $str="abCD99e"; $strlen=length($str); print$strlen,"n"; [htog@localhost]$./tiplen.pl 7 8、pack和unpack函数用于字符串的打包和解包,功能非常强大,支持多种打包格式字符串处理的。 $decimal=17; $newdecimal=unpack("B32",pack("N",$decimal)); print "$newdecimaln"; $string="张大华爱中国"; @array1=unpack("c*",$string); @array2=unpack("C*",$string); print (join(",",@array1),"n"); print (join(",@array2),"n"); $string1=pack("c*",@array1); $string2=pack("C*",@array2); print "$string1n"; print "$string2n"; 9、打印格式-sprintf $value=1234.56789; print sprintf "%.4fn",$value; 10、字符串比较函数 eq、ne、cmp、lt、gt、le、ge,使用cmp就好。绝不能用'==',要用eq,正确的做法是:不论整形Perl字符串,都用eq。 $string1="大华"; $string2="大华"; if($string1 eq $string2){ print "$sting1==$string2n"; } if($string1 ne $string2){ print "$string1!=$string2n"; } if( ($string1 cmp $string2)==0){ print "$string1==$string2n"; } $string1="zheng"; $string2="Kitty"; if($string1 lt $string2){ print "left < right n"; } if($string1 gt $string2){ print "left > right n"; } if($string1 le $string2){ print "left < right n"; } if($string1 ge $string2){ print "left > right n"; } 11、字符分割操作-split @数组=split(pattern,串),将Perl字符串用某模式分成多个单词。 #!/usr/bin/Perl $str="ABCDEiFG12i34567"; @array=split(//,$str);按空格分 foreach(@array){ print$_,"n"; } [hto@localhost]$./tip.pl ABCDEi FG12i 345 6 7 @array=split(/+/,$line);当一行中各单词间的空格多于一个时。 空格和TAB混杂情况下的split [hto@localhost]$vitip.pl #!/usr/bin/Perl $str="ABCDEiFG12i34567"; @array=split(/t/,$str); foreach(@array){ print$_,"n"; } [hto@localhost]$./tip.pl ABCDEiFG12i 34567 只分了两份,为什么?因为同时满足TAB和空格的只有一处,所以必须加[]。 @array=split(/[t]/,$str);现在才是真正的按空格和TAB分 [hto@localhost]$./tip.pl ABCDEi FG12i 345 6 7 但还是有缺陷,TAB和空格相连时,TAB被认为是空格划分的子串,或者空格被认为是TAB划分的子串。 $string="张大华爱中国"; @array=split(//,$string);#这种方法无法将其进行分成"张","大","华","爱","中","国"等单字 print (join(",@array),"n"); 12、演示中文字符夹带英文字符的反序(使用了多个函数) print "------begin-----n"; $string1="中国love!张大华"; @array=unpack("C*",$string1); $length=$#array;#此数组的最后一个下标 for(;$length>=0;){ if($array[$length]<=128){ #英文或者标点 push(@array2,$array[$length]); $length=$length-1; } else{ #中文字符 push(@array2,$array[$length-1]); push(@array2,$array[$length]); $length=$length-2; } } $string2=pack("C*",@array2); print "$string2n"; $dir=dir; print qx/$dir/; @name=qw/zheng wen feng Kitty Kitty/; print join(",@name); 13、字符合并操作-join 用join定义Perl字符串数组格式符号(缺省)必须与qw()合用。 语法:join($string,@array) @array=qw(onetwothree); $total="one,two,three"; @array=qw(onetwothree); $total=join(":",@array); $total="one:two:three"; 14、匹配数组内元素字串-grep @array=("one","on","in"); $count=grep(/on/,@array); 查询结果赋值给单变量 @array=("one","in"); @result=grep(/on/,@array); 查询结果赋值给数组 2 one on 15、字符串连接-'.=' 关于perl字符串连接的方法讨论。 $line = $line."456"; 这个语句中,line要被计算两次。 $line .= "456" ; 运算符',',常用于输出: print "金",$v1; print $str,"nn"; '.'运算符和','类似,也是Perl字符串相加但通常只用于print而'.'可以用在任何Perl字符串相加的地方。 print '12345大家來'."helloworld"; 結果变成:12345大家來helloworld 16、重复连接运算符号-x print"OK"x4; 結果变成: OKOKOKOK 这个计算一次就可以了。Perl字符串的连接可以连接整形和字符形,整形也被当作字符型处理,没有printf里的%d问题。 17、双引号字符串中的转义符 符号? ? 含义 n? ? 换行 r? ? 回车 t? ? 制表符 f? ? formfeed b? ? 退格 a? ? 响铃 e? ? escape(ASCII中的escape字符) 07? ? 任何八进制值(这里是,007=bell(响铃)) x7f? ? 任何十进制值(这里是,007=bell) cC? ? 一个控制符(这里是,ctrl+c) ? ? 反斜线 "? ? 双引号 l? ? 下个字符小写 L? ? 接着的字符均为小写直到E u? ? 下个字符大写 U? ? 接着的字符均为大写直到E Q? ? 在non-word字符前加上,直到E E? ? 结束L,E和Q

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读