Perl正则表达式 - 消除

时间:2013-12-04 11:44:26

标签: regex perl

这是一个新手。我在我的Perl脚本中使用glimpse来获取文件的路径。

例如

/home/user/Proj/A/Apps/App.pm
/home/user/Proj/B/Apps.pm

我需要在Proj之后取出那部分,即;输出应该是

A/Apps/App.pm    
B/Apps.pm

3 个答案:

答案 0 :(得分:2)

如果您想使用正则表达式/替换,您可以执行以下操作:

$str =~ s!.*/Proj/!!;

答案 1 :(得分:1)

这里有各种选择。当它总是在/home/user/Proj/时,我更喜欢第二种方式。如果没有,您也可以使用第一种方式。最好的方法是substr(当它是静态长度时):

use 5.014;
use strict;
use warnings;

my $s_a = "/home/user/Proj/A/Apps/App.pm";
my $s_b = "/home/user/Proj/B/Apps.pm";

say $s_a =~ s{.*Proj/}{}r;
say $s_b =~ s{.*Proj/}{}r;

say $s_a =~ s{/home/user/Proj/}{}r;
say $s_b =~ s{/home/user/Proj/}{}r;

say substr $s_a, 16;
say substr $s_b, 16;

输出:

A/Apps/App.pm
B/Apps.pm
A/Apps/App.pm
B/Apps.pm
A/Apps/App.pm
B/Apps.pm

答案 2 :(得分:1)

如果您想修改现有变量以删除路径的第一部分,那么它很简单:只需使用替换运算符s///将字符串的第一部分删除到/Proj/。我在这里使用了替代分隔符s|||以避免必须逃避模式中的斜杠。

use strict;
use warnings;

my @paths = qw{
  /home/user/Proj/A/Apps/App.pm
  /home/user/Proj/B/Apps.pm
};

for my $path (@paths) {
  $path =~ s|.*/Proj/||;
  print $path, "\n";
}

<强>输出

A/Apps/App.pm
B/Apps.pm

但是如果你想保留你的路径变量并将尾部复制到另一个变量,那么我认为最好使用正则表达式捕获想要的部分,就像这样< / p>

for my $path (@paths) {
  my ($tail) = $path =~ m|/Proj/(.+)|;
  print $tail, "\n";
}

输出相同。