我试图根据空行拆分变量。变量是
$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 :(得分: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);