Perl字串處理

來源:互聯網
上載者:User

 眾所周知Perl處理字串的功能非常強大,Perl(Practical Extraction and Reporting language)處理格式的功能也非常強大,這裡我們就開始學習一些Perl的格式和字串處理。

熟悉其最強大的三個函數:substr、pack、unpack。

1、大小寫處理函數 lc(轉為小寫) uc(轉為大寫) 。
$text="zhengwen feng";
$text2=lc $text;
$text3=uc $text;
print "$text2\n";
print "$text3\n";

2、將第一字母變為小寫(lcfirst),將第一個字母大寫(ucfirst)。
$string="zheng";
$string2=lcfirst $string;
$string3=ucfirst $string;
print "$string2\n";
print "$string3\n";

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,$position4\n";

#!/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 "$text\n";

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 "$newdecimal\n";
$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 "$string1\n";
print "$string2\n";

9、列印格式-sprintf
$value=1234.56789;
print sprintf "%.4f\n",$value;

10、字串比較函數 eq、ne、cmp、lt、gt、le、ge,使用cmp就好。絕不能用'==',要用eq,正確的做法是:不論整形Perl字串,都用eq。
$string1="大華";
$string2="大華";
if($string1 eq $string2){
print "$sting1==$string2\n";
}
if($string1 ne $string2){
print "$string1!=$string2\n";
}

if( ($string1 cmp $string2)==0){
print "$string1==$string2\n";
}

$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 "$string2\n";
$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","on","in");
@result=grep(/on/,@array);
查詢結果賦值給數組
2
one
on

15、字串串連-'.='
關於perl字串串連的方法討論。
$line = $line."456";
這個語句中,line要被計算兩次。
$line .= "456" ;
運算子',',常用於輸出:
print "金",$v1;
print $str,"\n\n";

'.'運算子和','類似,也是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字元)
\007    任何八進位值(這裡是,007=bell(響鈴))
\x7f    任何十進位值(這裡是,007=bell)
\cC    一個控制符(這裡是,ctrl+c)
\\    反斜線
\"    雙引號
\l    下個字元小寫
\L    接著的字元均為小寫直到\E
\u    下個字元大寫
\U    接著的字元均為大寫直到\E
\Q    在non-word字元前加上\,直到\E
\E    結束\L,\E和\Q

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.