假設我有一個字符串,數組如下:如何與多發性值替換字符串中的Perl
my $str = "currentStringwithKey<i>";
my @arr = ("1", "2");
那麼,有沒有更好的方式來迅速與每個值數組中替換字符串,而不是使用for循環,並將每個替換的輸出放入新數組中。
我預計產量爲:
my @outputArray = ("currentStringwithKey1", "currentStringwithKey2");
假設我有一個字符串,數組如下:如何與多發性值替換字符串中的Perl
my $str = "currentStringwithKey<i>";
my @arr = ("1", "2");
那麼,有沒有更好的方式來迅速與每個值數組中替換字符串,而不是使用for循環,並將每個替換的輸出放入新數組中。
我預計產量爲:
my @outputArray = ("currentStringwithKey1", "currentStringwithKey2");
不使用循環使用map爲做到這一點
/R用於返回替代的非破壞性修改並保持原來的字符串未觸及
my $str = "currentStringwithKey<i>";
my @arr = ("1", "2");
my @output = map{ $str=~s/<i>/$_/rg } @arr;
#$str not to be changed because of the r modifier
print @output;
然後@output
陣列包含這樣
$output[0] = "currentStringwithKey1",
$output[1] = "currentStringwithKey2"
這樣就會產生'{「currentStringwithKey 1」,「currentStringwithKey 2」}',不完全是要求的。 OP想要用數字替換文本''。 –
編輯完成後就可以了。但是,如果''還沒有結束呢? '$ str'的值是一個_template_,''是一個佔位符。 –
感謝@mkHun,那就是我要找的 –
這裏有你想要的。這種做法將與替換文本替換<i>
無論在哪裏<i>
出現在模板$str
@outputArray = map { my $i=$str; $i =~ s/\<i\>/$_/; $i } @arr
您需要$str
複製到一個臨時取代,因爲在原地工作。如果您直接使用$str
,那麼其價值將首次發生變化。
正則表達式中的'r'標誌可以讓你更乾淨地做到這一點。 – Sobrique
只要使用'map {$ str =〜s//$ _/r}'就可以。不需要臨時變量或轉義'<' and '>'。 –
你是不是指'my $ str [i] =「currenttring」;'? –
如果你可以自己設置字符串標記,那麼你可以使用sprintf:'my $ str =「currentString%s」;我的@output = map {sprintf $ str,$ _} @ arr'。 – TLP
@TLP謝謝!我正在使用只是爲了一個字符的含義需要被替換! –