Perl基于正斜杠拆分字符串

时间:2016-03-07 07:23:28

标签: regex perl

我是Perl的新手,所以这是一个基本问题。我有一个字符串,如下所示。我有兴趣从中取出日期,所以考虑使用斜杠

来拆分它
my $path = "/bla/bla/bla/20160306";
my $date = (split(/\//,$path))[3];#ideally 3 is date position in array after split
print $date;

但是,我没有看到预期的输出,而是看到5被打印。请指导。

3 个答案:

答案 0 :(得分:3)

由于路径以分隔符/本身开头,split首先返回一个空字符串的列表(在第一个/的左侧);一个元素更多。发布的代码然后返回路径中的最后一个子目录,而不是日期。

如果日期始终是字符串中的最后一项,您可以选择最后一个元素

my $date = (split '/', $path)[-1];

您几乎可以使用任何您想要的分隔符

my @fields = split '/', $path;

要明确查看所有字段,例如

print "|$_|\n" for @fields;

答案 1 :(得分:0)

只需将其绑定到最后:

(\d+)$
# look for digits at the end of the string

a demo on regex101.com。捕获组仅用于澄清,但在这种情况下并不是真的需要。

Perl这将是(我是一个PHP / Python人,所以当它丑陋时请耐心等待)

my $path = "/bla/bla/bla/20160306";
$path =~ /(\d+)$/;
print $1;

请参阅a demo on ideone.com

答案 2 :(得分:-1)

试试这个

使用预测来做到这一点。它通过拆分捕获/。然后使用/替换数据以删除斜杠。

my $path = "/a/b/c/20160306";
my $date = (split(/(?=\/)/,$path))[3];
$date=~s/^\///;
print $date;

或者使用模式匹配与分组来实现它。

my $path = "/a/b/c/20160306";
my @data = $path =~m/\/(\w+)/g;
print $data[3];