2016-03-08 151 views
-4
foreach $suitename (@suitename) 
    { 
     foreach $fileLines (@fileLines) 
     { 
      if (index($fileLines, $suitename) != -1) 
      { 
        $str = $fileLines; 
        $find = "msg=\"/a-z/\""; 
        $replace = "msg=\"f\""; 
        $find = quotemeta $find; 
        $str =~ s/$find/$replace/g; 
        print $str; 
      } 
     } 
    } 

嗨,我想用$ replace替換所有$ find,msg =「random stuff」,但我沒有設法這樣做。我所做的就是讓我所有的味精=「隨機的東西」這裏@msgperl搜索並替換隨機文本

for ($i = 0; $i < scalar(@fileLines); $i++){ 
     if ($fileLines[$i] =~ /(msg=".*") /) 
     { 
     push (@msg,"$1\n"); 

     } 
} 

請指點。 非常感謝

+0

第一個代碼段不會修改'@ fileLines'。我認爲你期待它這樣做。如果你希望發生這種情況,你需要在'$ fileLines'上執行替換,而不是在$ str上執行替換。 – DavidO

回答

0

通過使用quotemeta,您直接解釋了$find。但是刪除它還不夠,因爲您使用的值不準確:要匹配字母a-z,可以改爲使用字符類。爲了避免backslashing雙引號,使用單引號:

$find = 'msg="[a-z]"'; 
$replace = 'msg="f"'; 

如果你想要一個以上的字符,添加+(「至少一次」):

$find = 'msg="[a-z]+"'; 

,而不是字符串,就可以使用qr運算符創建已編譯的正則表達式:

$find = qr/msg="[a-z]+"/;