2013-02-28 87 views
1

我想从行尾开始删除匹配模式,并将行的其余部分存储到变量中如何在perl中执行?Perl删除匹配模式,并将其余部分存储到变量

对于如:

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

我想从上面$ ROOT变量和打印/存储其余去掉 “/ bin” 中。下面的代码是否工作?

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

将上面的代码打印输出之下,

/home/usr 

请注意,我可能是错以上建议为我新。请帮助我。

+0

它会一直是一个目录还是任何字符串? – amphibient 2013-02-28 21:20:23

+4

而不是问“它会做这个/那个?”,为什么不自己尝试呢?你确实可以使用perl解释器,不是吗? – amphibient 2013-02-28 21:21:14

+1

这是执行'$ ROOT =〜s/\/bin $ //' – Borodin 2013-02-28 23:02:46

回答

4

试试这个:

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

而像foampile说,你可以用perl解释测试正则表达式。我建议您使用交互式perlperlconsolere.pl

perlconsole

enter image description here

6

或者你可以使用File::Basename

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

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

输出:

/home/usr 
+1

+1的复杂方法+1这是处理文件名和路径名时的正确方法。 – squiguy 2013-02-28 22:13:29

1

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

$ROOT =~ s/^(.*)\/bin/$1/ 

那么它会工作。要删除任何路径的最后一段,请写

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