我是Perl的新手,所以这是一个基本问题。我有一个字符串,如下所示。我有兴趣从中取出日期,所以考虑使用斜杠
来拆分它my $path = "/bla/bla/bla/20160306";
my $date = (split(/\//,$path))[3];#ideally 3 is date position in array after split
print $date;
但是,我没有看到预期的输出,而是看到5被打印。请指导。
答案 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;
答案 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];