我想从行尾开始删除匹配模式,并将行的其余部分存储到变量中如何在perl中执行?Perl删除匹配模式,并将其余部分存储到变量
对于如:
$ROOT = "/home/usr/bin";
我想从上面$ ROOT变量和打印/存储其余去掉 “/ bin” 中。下面的代码是否工作?
$ROOT =s/^(.*?)(?=\/bin)/$1/g
print $ROOT;
将上面的代码打印输出之下,
/home/usr
请注意,我可能是错以上建议为我新。请帮助我。
我想从行尾开始删除匹配模式,并将行的其余部分存储到变量中如何在perl中执行?Perl删除匹配模式,并将其余部分存储到变量
对于如:
$ROOT = "/home/usr/bin";
我想从上面$ ROOT变量和打印/存储其余去掉 “/ bin” 中。下面的代码是否工作?
$ROOT =s/^(.*?)(?=\/bin)/$1/g
print $ROOT;
将上面的代码打印输出之下,
/home/usr
请注意,我可能是错以上建议为我新。请帮助我。
试试这个:
my $ROOT = "/home/usr/bin";
$ROOT =~ s!/bin$!!; # the delimiter is "!" to avoid escaping "/"
print $ROOT;
而像foampile说,你可以用perl
解释测试正则表达式。我建议您使用交互式perl
壳perlconsole
或re.pl
perlconsole
:
或者你可以使用File::Basename:
use strict;
use warnings;
use File::Basename;
my $ROOT = "/home/usr/bin";
print dirname($ROOT);
输出:
/home/usr
+1的复杂方法+1这是处理文件名和路径名时的正确方法。 – squiguy 2013-02-28 22:13:29
你已经通过使用前瞻来打破它。如果你只写了
$ROOT =~ s/^(.*)\/bin/$1/
那么它会工作。要删除任何路径的最后一段,请写
$ROOT =~ s|/[^/]*$||
它会一直是一个目录还是任何字符串? – amphibient 2013-02-28 21:20:23
而不是问“它会做这个/那个?”,为什么不自己尝试呢?你确实可以使用perl解释器,不是吗? – amphibient 2013-02-28 21:21:14
这是执行'$ ROOT =〜s/\/bin $ //' – Borodin 2013-02-28 23:02:46