Rah*_*ddy 8 arrays string perl split
my $line = "file1.gz file2.gz file3.gz";
my @abc = split('', $line);
print "@abc\n";
Run Code Online (Sandbox Code Playgroud)
预期产量:
file1.gz
file2.gz
file3.gz
Run Code Online (Sandbox Code Playgroud)
我希望输出file1.gz在$abc[0],file2.gz在$abc[1]和 file3.gz中$abc[2].我怎么拆分$line?
rai*_*7ow 15
按空格拆分字符串非常简单:
print $_, "\n" for split ' ', 'file1.gz file1.gz file3.gz';
Run Code Online (Sandbox Code Playgroud)
这是split实际的一种特殊形式(因为这个函数通常采用模式而不是字符串):
作为另一种特殊情况,当省略或由单个空格字符(例如或)组成的文字字符串时,
split模拟命令行工具的默认行为.在这种情况下,在拆分发生之前删除任何前导空格,而是将其视为; 特别是,这意味着任何连续的空格(不只是单个空格字符)都用作分隔符.awkPATTERN' '"\x20"EXPRPATTERN/\s+/
这是原始问题的答案(使用一个没有任何空格的简单字符串):
也许你想分手.gz扩展:
my $line = "file1.gzfile1.gzfile3.gz";
my @abc = split /(?<=\.gz)/, $line;
print $_, "\n" for @abc;
Run Code Online (Sandbox Code Playgroud)
在这里,我使用了(?<=...)构造,它是后面的断言,基本上在前面有.gz子串的行中的每个点处进行分割.
如果使用固定的扩展集,则可以扩展模式以将它们全部包含在内:
my $line = "file1.gzfile2.txtfile2.gzfile3.xls";
my @exts = ('txt', 'xls', 'gz');
my $patt = join '|', map { '(?<=\.' . $_ . ')' } @exts;
my @abc = split /$patt/, $line;
print $_, "\n" for @abc;
Run Code Online (Sandbox Code Playgroud)
Rin*_*g Ø 10
有$line像现在,你可以基于至少一个空格分隔简单地分割字符串
my @answer = split(' ', $line); # creates an @answer array
Run Code Online (Sandbox Code Playgroud)
然后
print("@answer\n"); # print array on one line
Run Code Online (Sandbox Code Playgroud)
要么
print("$_\n") for (@answer); # print each element on one line
Run Code Online (Sandbox Code Playgroud)
我喜欢用()的split,print和for.