Perl 搜索并替换随机文本


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="随机的东西",但我没有设法这样做。 我所做的是在这里获取我所有的msg="随机的东西"@msg

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

请指教。多谢

通过使用 quotemeta,您可以从字面上解释$find。但是删除它是不够的,因为您使用的值不准确:要匹配字母 a-z,您可以改用字符类。为避免反斜杠双引号,请使用单引号:

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

如果需要多个字符,请添加+("至少一次"):

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

您可以使用 qr 运算符创建已编译的正则表达式,而不是字符串:

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

最新更新