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;

foampile が言ったように、perlインタプリタで正規表現をテストできます。インタラクティブperlシェルperlconsoleまたはre.pl

perlconsole:

ここに画像の説明を入力

于 2013-02-28T21:20:56.627 に答える
1

先読みを使用してそれを破りました。ちょうど書いていたら

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

それならうまくいくでしょう。パスの最後のセグメントを削除するには、次のように記述します。

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