我想從行尾開始刪除匹配模式,並將行的其餘部分存儲到變量中如何在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