本文和大家重點(diǎn)討論一下Perl split函數(shù)的用法,Perl中的一個(gè)非常有用的函數(shù)是Perl split函數(shù)-把字符串進(jìn)行分割并把分割后的結(jié)果放入數(shù)組中。這個(gè)Perl split函數(shù)使用規(guī)則表達(dá)式(RE),如果未特定則工作在$_變量上。
Perl split函數(shù)
Perl中的一個(gè)非常有用的函數(shù)是Perl split函數(shù)-把字符串進(jìn)行分割并把分割后的結(jié)果放入數(shù)組中。這個(gè)Perl split函數(shù)使用規(guī)則表達(dá)式(RE),如果未特定則工作在$_變量上。
Perl split函數(shù)可以這樣使用:
代碼如下:
$info="Caine:Michael:Actor:14,LeafyDrive";
@personal=split(/:/,$info);
其結(jié)果是:@personal=("Caine","Michael","Actor","14,LeafyDrive");
◆如果我們已經(jīng)把信息存放在$_變量中,那么可以這樣:
代碼如下:
@personal=split(/:/);
如果各個(gè)域被任何數(shù)量的冒號(hào)分隔,可以用RE代碼進(jìn)行分割:
代碼如下:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:+/);
其結(jié)果是:@personal=("Capes","Geoff","Shotputter","BigAvenue");
但是下面的代碼:
代碼如下:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:/);
的結(jié)果是:@personal=("Capes","Geoff","","Shotputter","","","BigAvenue");
◆這個(gè)Perl split函數(shù)中單詞可以被分割成字符,句子可以被分割成單詞,段落可以被分割成句子:
代碼如下:
@chars=split(//,$word);
@words=split(//,$sentence);
@sentences=split(//./,$paragraph);
在第一句中,空字符串在每個(gè)字符間匹配,所以@chars數(shù)組是一個(gè)字符的數(shù)組。>>
//之間的部分表示split用到的正則表達(dá)式(或者說分隔法則)
/s是一種通配符,代表空格
+代表重復(fù)一次或者一次以上。
所以,/s+代表一個(gè)或者一個(gè)以上的空格。
split(//s+/,$line)表示把字符串$line,按空格為界分開。
比如說,$line="你好朋友歡迎光臨我的網(wǎng)站jb51.net";
split(//s+/,$line)后得到:
你好朋友歡迎訪問我的網(wǎng)站jb51.net
一般用法: @somearray = split(/:+/, $string ); #括號(hào)可以不要。 若不指定$string, 則對(duì)默認(rèn)變量$_操作, 兩斜線間為分割符,可以用正則表達(dá)式,強(qiáng)悍異常。
在perl手冊(cè)里,有一個(gè)用法不多見。即: split /PATTERN/, EXPR, LIMIT; 關(guān)鍵就是這個(gè)LIMIT參數(shù),可以節(jié)省不少事情。 如果使用了LIMIT,且是正數(shù),表示分割成不多于LIMIT指定的數(shù)目的域。If LIMIT is unspecified or zero, trailing null fields are stripped (which potential users of pop would do well to remember). If LIMIT is negative, it is treated as if an arbitrarily large LIMIT had been specified. Note that splitting an EXPR that evaluates to the empty string always returns the empty list, regardless of the LIMIT specified.
通過制定LIMIT,可以在很長(分割產(chǎn)生幾萬個(gè)元素or域)的行分割操作中,只返回關(guān)鍵的前幾列的域值,減少了內(nèi)存使用及時(shí)間消耗。比如一般的基因型數(shù)據(jù),第一列通常是材料命名,需要通過材料名的判斷取舍,這時(shí)候就可以這樣用。 my ($firstfield) = split //t/, $someline, 1; 如果需要前面幾列的值,這樣的方式對(duì)大文件效率很好: my (undef, $var1, undef, undef, undef, $var2)=split //t/, $someline, 6;
|
新聞熱點(diǎn)
疑難解答
圖片精選