我想从行尾开始删除匹配模式并将行的其余部分存储到一个变量中如何在 perl 中执行?
例如:
$ROOT = "/home/usr/bin";
我想从上面的 $ROOT 变量中删除“/bin”并打印/存储其余部分。下面的代码会起作用吗?
$ROOT =s/^(.*?)(?=\/bin)/$1/g
print $ROOT;
上面的代码会在输出下面打印吗?
/home/usr
请注意,由于我是新手,因此上述建议可能有误。请帮帮我。
我想从行尾开始删除匹配模式并将行的其余部分存储到一个变量中如何在 perl 中执行?
例如:
$ROOT = "/home/usr/bin";
我想从上面的 $ROOT 变量中删除“/bin”并打印/存储其余部分。下面的代码会起作用吗?
$ROOT =s/^(.*?)(?=\/bin)/$1/g
print $ROOT;
上面的代码会在输出下面打印吗?
/home/usr
请注意,由于我是新手,因此上述建议可能有误。请帮帮我。
或者你可以使用File::Basename:
use strict;
use warnings;
use File::Basename;
my $ROOT = "/home/usr/bin";
print dirname($ROOT);
输出:
/home/usr
尝试这个 :
my $ROOT = "/home/usr/bin";
$ROOT =~ s!/bin$!!; # the delimiter is "!" to avoid escaping "/"
print $ROOT;
就像泡沫所说的那样,您可以使用perl
解释器测试您的正则表达式。我向您推荐交互式perl
外壳perlconsole
或re.pl
perlconsole
:
你已经通过使用前瞻来打破它。如果你只写
$ROOT =~ s/^(.*)\/bin/$1/
那么它会起作用。要删除任何路径的最后一段,请编写
$ROOT =~ s|/[^/]*$||