1

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

例如:

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

我想从上面的 $ROOT 变量中删除“/bin”并打印/存储其余部分。下面的代码会起作用吗?

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

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

/home/usr

请注意,由于我是新手,因此上述建议可能有误。请帮帮我。

4

3 回答 3

6

或者你可以使用File::Basename

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

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

输出:

/home/usr
于 2013-02-28T21:31:15.153 回答
5

尝试这个 :

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

就像泡沫所说的那样,您可以使用perl解释器测试您的正则表达式。我向您推荐交互式perl外壳perlconsolere.pl

perlconsole

在此处输入图像描述

于 2013-02-28T21:20:56.627 回答
1

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

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

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

$ROOT =~ s|/[^/]*$||
于 2013-02-28T23:08:53.530 回答