这是一个新手。我在我的Perl脚本中使用glimpse来获取文件的路径。
例如
/home/user/Proj/A/Apps/App.pm
/home/user/Proj/B/Apps.pm
我需要在Proj
之后取出那部分,即;输出应该是
A/Apps/App.pm
B/Apps.pm
答案 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";
}
输出相同。