xyz*_*xyz 0 perl split chop chomp
我有一个字符串 str a\tb\tc\td\te
我希望第一个字段值a进入变量,然后第二个字段值b进入其他变量,然后c\td进入第三个变量和最后一个字段值e进入一个变量.
如果我做
my ($a,$b,$c,$d) = split(/\t/,$_,4);
Run Code Online (Sandbox Code Playgroud)
$c只会收购c和$d将收购d\te
我可以:
my ($a,$b,$c) = split(/\t/,$_,3);
Run Code Online (Sandbox Code Playgroud)
然后c会得到c\td\te
,我可以以某种方式(如何?)摆脱最后的价值并把它拿进去$d
怎么做到这一点?
split当你保持秩序时很好.如果你打破了这样的订单,你就会遇到一些问题.你有两个选择:
\t,然后加入你想要的.第一个选择的例子是:
my ($a,$b,$c1, $c2, $d) = split /\t/, $_;
my $c = "$c1\t$c2";
Run Code Online (Sandbox Code Playgroud)
第二种选择的例子是:
my ($a, $b, $c, $d) = (/(.*?)\t(.*?)\t(.*?\t.*?)\t(.*?)/;
Run Code Online (Sandbox Code Playgroud)
每组括号都可以捕捉到你想要的东西.?在*确保括号不会捕获之后使用非贪婪修饰符()\t.
编辑:如果意图是拥有任意数量的变量,那么最好使用数组:
my @x = split /\t/, $_;
my $a = $x[0];
my $b = $x[1];
my $c = join "\t", @x[2..($#x-1)];
my $d = $x[-1];
Run Code Online (Sandbox Code Playgroud)