我可能分裂替代功能來清理字符串
$string = "AA_name"
成@tmp陣列和搶$ TMP [1]只獲取名稱和丟棄AA_。 但是,你將如何用s ///做到這一點? 我不知道用正則表達式替換前面的所有內容,包括下劃線沒有任何內容,只是給我留下了名字。 喜歡的東西
$n = $string =~ s/^_//;
但我相當有正則表達式的小白。
我可能分裂替代功能來清理字符串
$string = "AA_name"
成@tmp陣列和搶$ TMP [1]只獲取名稱和丟棄AA_。 但是,你將如何用s ///做到這一點? 我不知道用正則表達式替換前面的所有內容,包括下劃線沒有任何內容,只是給我留下了名字。 喜歡的東西
$n = $string =~ s/^_//;
但我相當有正則表達式的小白。
您可以使用下面的正則表達式
$string = "AA_name";
($name,undef) = $string =~ /(.*)_.*/;
print "name=$name", ",Val=" , $string;
你可以做到以下幾點:
use strict;
use warnings;
my $string = "AA_name";
(my $n = $string) =~ s/.*_//;
print $n;
輸出:
name
如果分離是一個點,你可以使用s/.*\.//
(轉義點)或者你可以使用一個字符類:s/.*[.]//
。
轉換點或字符類。感謝您使用正則表達式讓我更聰明一些。 – user2674514
@ user2674514 - 轉義點,因爲它是與除了換行符之外的任何單個字符匹配的元字符(除非設置了某個標誌)。 – Kenosis
您可以使用:
$string =~ s/^[^_]+_//;
這意味着更換任何前導字符是不是下劃線,加下劃線,什麼也沒有;這意味着隨後的下劃線留在那裏,即。
AA_My_Name ==> My_Name
如果你想刪除直到最後一個 '_',那麼使用:
$string =~ s/^.+_//;
其它分隔符可以使用。如果你想使用'。'那麼請記住用'\'來轉義它。
請注意,您不必將結果分配給任何東西。 s ///修改參數字符串。
是的,這是一個很好的觀點。我可能會遇到另一個下劃線可能存在的情況。謝謝。 – user2674514
您的示例替換第一次出現的下劃線效果很好。我嘗試使用相同的方法刪除/ home/usr/name這樣的路徑字符串中最後一次出現的「/」,但不起作用$ path =〜s /^.+\/// ;任何建議爲什麼這不起作用?我想要的結果是$ path = name – user2674514
謝謝。我想我理解這裏的正則表達式。但是,如果我的字符串中的分隔符是點。如AA.name? – user2674514
然後,你應該有一個正則表達式像$ string =〜/(.*)\..*/ – Raghuram
謝謝Raghuram。 – user2674514