2014-01-22 55 views
0

我可能分裂替代功能來清理字符串

$string = "AA_name" 

成@tmp陣列和搶$ TMP [1]只獲取名稱和丟棄AA_。 但是,你將如何用s ///做到這一點? 我不知道用正則表達式替換前面的所有內容,包括下劃線沒有任何內容,只是給我留下了名字。 喜歡的東西

$n = $string =~ s/^_//; 

但我相當有正則表達式的小白。

回答

0

您可以使用下面的正則表達式

$string = "AA_name"; 
($name,undef) = $string =~ /(.*)_.*/; 
print "name=$name", ",Val=" , $string; 
+0

謝謝。我想我理解這裏的正則表達式。但是,如果我的字符串中的分隔符是點。如AA.name? – user2674514

+0

然後,你應該有一個正則表達式像$ string =〜/(.*)\..*/ – Raghuram

+0

謝謝Raghuram。 – user2674514

0

你可以做到以下幾點:

use strict; 
use warnings; 

my $string = "AA_name"; 
(my $n = $string) =~ s/.*_//; 
print $n; 

輸出:

name 

如果分離是一個點,你可以使用s/.*\.// (轉義點)或者你可以使用一個字符類:s/.*[.]//

+0

轉換點或字符類。感謝您使用正則表達式讓我更聰明一些。 – user2674514

+0

@ user2674514 - 轉義點,因爲它是與除了換行符之外的任何單個字符匹配的元字符(除非設置了某個標誌)。 – Kenosis

1

您可以使用:

$string =~ s/^[^_]+_//; 

這意味着更換任何前導字符是不是下劃線,加下劃線,什麼也沒有;這意味着隨後的下劃線留在那裏,即。

AA_My_Name ==> My_Name 

如果你想刪除直到最後一個 '_',那麼使用:

$string =~ s/^.+_//; 

其它分隔符可以使用。如果你想使用'。'那麼請記住用'\'來轉義它。

請注意,您不必將結果分配給任何東西。 s ///修改參數字符串。

+0

是的,這是一個很好的觀點。我可能會遇到另一個下劃線可能存在的情況。謝謝。 – user2674514

+0

您的示例替換第一次出現的下劃線效果很好。我嘗試使用相同的方法刪除/ home/usr/name這樣的路徑字符串中最後一次出現的「/」,但不起作用$ path =〜s /^.+\/// ;任何建議爲什麼這不起作用?我想要的結果是$ path = name – user2674514