Perl:如何拆分字符串而不存储到数组并继续拆分?

时间:2014-03-20 18:10:08

标签: perl split temporary

我想之前已经问过,但我找不到它。

my $string = "something_like:this-and/that";
my @w1 = split(/_/, $string);
my @w2 = split(/-/, $w1[1]);
my @w3 = split(/:/, $w2[0]);
print $w3[1]; #print out "this"

无论如何要避免临时数组变量@ w1,@ w2和@ w3并直接得到$ w3 [1]?我记得继续拆分工作,但忘了语法。 感谢。

3 个答案:

答案 0 :(得分:4)

是的,这是可能的,但会更难阅读,所以不建议:

my $string = "something_like:this-and/that";
my $this = (split /:/, (split /-/, (split(/_/, $string))[1])[0])[1];
print $this; #print out "this"

或者,您可以在此实例中使用正则表达式,但不要认为它会添加任何内容:

my $string = "something_like:this-and/that";
my ($this) = $string =~ /.*?_.*?:([^-]*)/ or warn "not found";
print $this;

答案 1 :(得分:2)

除非您的实际数据与您的示例明显不同,否则您自己的解决方案会不必要地拆分下划线。你可以写这个

use strict;
use warnings;

my $string = "something_like:this-and/that";
my $value = (split /-/, (split /:/, $string)[1])[0];
print $value;

或者此解决方案使用正则表达式并按照您的要求进行操作

use strict;
use warnings;

my $string = "something_like:this-and/that";
my ($value) = $string =~ /:([^_-]*)/;
print $value;

<强>输出

this

答案 2 :(得分:0)

这将修改$string

my $string = "something_like:this-and/that";
$string =~ s/^.*:(.+)-.*/$1/;