2009-09-11 142 views
10

我有一個字符串,由製表符分隔幾個部分:如何將一個字符串拆分爲只有兩個部分的Perl?

Hello\t2009-08-08\t1\t2009-08-09\t5\t2009-08-11\t15 

我想這只是第一個選項卡上的分裂,在$k讓「你好」結束了和和休息$v結束。這並不奏效:

my ($k, $v) = split(/\t/, $string); 

我該怎麼做?

+3

其實,我剛剛閱讀文檔split(),被困惑;用Google搜索,然後來到這裏。我在哪裏找到答案。 – Chap 2013-01-25 06:10:02

回答

36

爲了得到這一點,你需要使用第三個參數來split(),這給函數域的最大數量分裂成(如屬正數):

my($first, $rest) = split(/\t/, $string, 2); 
+0

如果數值的長度不確定,我想用$ v捕獲所有數據。 $ V的格式將會是什麼樣DATE_1 \ tvalue_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ... – biznez 2009-09-11 18:37:21

+2

這將在$捕獲$ K 「DATE_1」 和 「_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ......」訴有關更多信息,我將鏈接到'split()'函數的perldoc參考頁面 - 它將解釋它如何在您想要的所有細節中工作。我建議你閱讀它。 Perldoc的信息非常豐富。 – 2009-09-11 18:39:28

7

號它會給你前兩項和其餘的折騰。試試這個:

my ($k, $v) = split(/\t/, $string, 2); 
+0

如果數值的長度不確定,我想以$ v的形式捕獲所有數據。 $ V的格式將會是什麼樣DATE_1 \ tvalue_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ... – biznez 2009-09-11 18:36:44

+0

像克里斯·魯茨在他的評論說,這個數字告訴Perl多少部分分成。因此,值爲2時,第一部分以$ v爲單位,第一部分在分割中消耗,剩下的字符串不會變爲$ v。 – 2009-09-11 18:44:28

1

另一種選擇是使用簡單的正則表達式。

my($k,$v) = $str =~ /([^\t]+)\t(.+)/; 
相關問題