2013-02-28 83 views
1

我想從行尾開始刪除匹配模式,並將行的其餘部分存儲到變量中如何在perl中執行?Perl刪除匹配模式,並將其餘部分存儲到變量

對於如:

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

我想從上面$ ROOT變量和打印/存儲其餘去掉 「/ bin」 中。下面的代碼是否工作?

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

將上面的代碼打印輸出之下,

/home/usr 

請注意,我可能是錯以上建議爲我新。請幫助我。

+0

它會一直是一個目錄還是任何字符串? – amphibient 2013-02-28 21:20:23

+4

而不是問「它會做這個/那個?」,爲什麼不自己嘗試呢?你確實可以使用perl解釋器,不是嗎? – amphibient 2013-02-28 21:21:14

+1

這是執行'$ ROOT =〜s/\/bin $ //' – Borodin 2013-02-28 23:02:46

回答

4

試試這個:

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

而像foampile說,你可以用perl解釋測試正則表達式。我建議您使用交互式perlperlconsolere.pl

perlconsole

enter image description here

6

或者你可以使用File::Basename

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

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

輸出:

/home/usr 
+1

+1的複雜方法+1這是處理文件名和路徑名時的正確方法。 – squiguy 2013-02-28 22:13:29

1

你已經通過使用前瞻來打破它。如果你只寫了

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

那麼它會工作。要刪除任何路徑的最後一段,請寫

$ROOT =~ s|/[^/]*$||