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]+"/;