2013-03-18 64 views
0

说我有具有以下数据的数组搜索和阵列中的替代

@array = ('/root/level1','/root/level2', 
      '/root/level1/level2','/root/level1/level2/level3') 

我想遍历这个数组,并用其最后一个字替换每个元素作为

@array = ('level1','level2','level2','level3') 

我正则表达式不好,任何人都可以帮忙吗?

回答

5

采用分体式和地图:

@array=map{(split(/\//,$_))[-1]}@array; 

使用正则表达式:

@array=map{m|.*/(.*)|}@array; 
+0

的工作,感谢。 – 2013-03-18 08:40:40

3

为什么要使用正则表达式时,你有File::Basename模块做的工作适合你。它是在Perl 5.

核心模块
use strict; 
use warnings; 
use Data::Dumper; 
use File::Basename; 

my @array = ('/root/level1', 
      '/root/level2', 
      '/root/level1/level2', 
      '/root/level1/level2/level3'); 

@array = map basename($_), @array; 
print Dumper \@array; 

输出:

$VAR1 = [ 
      'level1', 
      'level2', 
      'level2', 
      'level3' 
     ]; 
+0

实际上,我拥有的数组不包含文件路径,这些是简单的名称,看起来像路径,但它们不是。所以我宁愿使用正则表达式。 – 2013-03-20 04:33:20

+0

你认为正则表达式使用不同于这个模块的规则吗? – TLP 2013-03-20 13:48:04