2011-12-14 95 views
2

我想基於空行分割變量。變量是如何匹配空白行

$s = "iSCSI cred number=0 
name=match1 
string=2 
name=number1 

iSCSI cred number=1 
name=match2 
string=3 
name=number2 

iSCSI cred number=2 
name=match3 
string=4 
name=number3"; 
+0

爲什麼在這個問題上的所有downvotes? – TLP 2011-12-14 14:17:28

回答

3

有什麼不可以:

my @split_values = split/\n\n/, $s 

或者你可以用正向前查找多個空白字符分割的字符串iSCSI

my @split_values = split/\s+(?=iSCSI)/, $s; 

,對於您的簡單工作的情況下,無論空格字符是否爲換行符,回車符或空格。

+0

它不工作。它的數組 – Nitesh 2011-12-14 12:55:08

+0

的第一個索引中的所有變量現在不起作用。 – Nitesh 2011-12-14 12:58:34

2

使用分裂與 '\ n \ S' 作爲分隔符,

my @arr = split('\n\s',$s); 
2
my @arr = split(/[\n]{2,}/,$s); 
3

如果 「空」 行包含薩姆空間,你可以這樣做:

split/\n+\s*\n+/, $s; 

,或者是unicode兼容:

split/\R+\s*\R+/, $s; 
3

很多很好的答案如何處理你所擁有的字符串。但是讓我們猜一猜你應該問什麼問題。

如何在段落中讀取文件? - 這恰好是一個Frequently Asked Question

如果你在從文件中讀取這些數據,那麼你會更好,正確地分析它,你在閱讀它。

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

local $/ = ''; 

while (<DATA>) { 
    say "Record number $. is:\n$_"; 
} 

__DATA__ 
iSCSI cred number=0 
name=match1 
string=2 
name=number1 

iSCSI cred number=1 
name=match2 
string=3 
name=number2 

iSCSI cred number=2 
name=match3 
string=4 
name=number3 

這是當然的,只是在猜測什麼你正在努力。如果我不符合標準,請不理我。