2011-12-14 106 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 

这是当然的,只是在猜测什么你正在努力。如果我不符合标准,请不理我。