如何匹配空白行

时间:2011-12-14 12:48:33

标签: perl

我试图根据空行拆分变量。变量是

$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";

5 个答案:

答案 0 :(得分:3)

没有任何内容:

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

或者,您可以使用字符串iSCSI的正前瞻分割多个空白字符:

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

这适用于您的简单案例,无论空白字符是换行符,回车符还是空格。

答案 1 :(得分:3)

如果"空"行包含一些空格,你可以这样做:

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

或者,与unicode兼容:

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

答案 2 :(得分: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

这当然只是猜测你想要做什么。如果我离开了标记,请忽略我。

答案 3 :(得分:2)

使用拆分'\ n \ s'作为分隔符,

my  @arr =  split('\n\s',$s);

答案 4 :(得分:2)

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