在perl中,如何以这种理想的方式分割字符串?

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

怎么做到这一点?

Nat*_*man 5

split当你保持秩序时很好.如果你打破了这样的订单,你就会遇到一些问题.你有两个选择:

  1. 按照分割\t,然后加入你想要的.
  2. 要明确.

第一个选择的例子是:

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)