Perl删除匹配模式并将其余部分存储到变量中

时间:2013-02-28 21:18:04

标签: perl

我想从行尾开始删除匹配模式,并将其余行存储到变量中,如何在perl中进行操作?

例如:

$ROOT = "/home/usr/bin";

我想从$ ROOT变量上面删除“/ bin”并打印/存储其余变量。以下代码是否有效?

$ROOT =s/^(.*?)(?=\/bin)/$1/g
print $ROOT;

上面的代码会打印在输出下面吗,

/home/usr

请注意,由于我是新人,我可能错误地提出上述建议。请帮帮我。

3 个答案:

答案 0 :(得分:6)

或者您可以使用File::Basename

use strict;
use warnings;
use File::Basename;

my $ROOT = "/home/usr/bin";
print dirname($ROOT);

输出:

/home/usr

答案 1 :(得分:5)

试试这个:

my $ROOT = "/home/usr/bin";
$ROOT =~ s!/bin$!!; # the delimiter is "!" to avoid escaping "/"
print $ROOT;

就像foampile所说,你可以用perl解释器来测试你的正则表达式。我建议您使用互动perl shell perlconsolere.pl

perlconsole

enter image description here

答案 2 :(得分:1)

你已经通过使用前瞻来打破它了。如果你写的只是

$ROOT =~ s/^(.*)\/bin/$1/
那么它会起作用。要删除任何路径的最后一段,请写

$ROOT =~ s|/[^/]*$||