我正在尝试使用 Regex 和包含更改的哈希表来更改一行。我正在使用下一个代码来更改:
foreach $key (keys %{$hash{$sub_hash}}){
$line =~ s/$key/$hash{$csub_hash}{$key}/g;
}
我的哈希是:
$hash{sub_hush_a}={
"\\mi2ie..." => "\\RSUop...",
"iereset..." => "\\agres...",
};
问题在于,对于数据集中的第一对,每当它发生变化时,它都会将 \\
替换为 \
,而对于第二对,则只会放置一个, 正如预期的那样。
它也给了我错误:
无法识别的转义\m 已通过
。
怎么了?
澄清:名字中的点在程序中没有,名字比我写的长,而且都是只包含字母和数字。点在这里是为了缩短。
编辑:
问题解决了,(双 \
和错误消息)如果我将第一对更改为:
"mi2ie..."=> "RSUop...",
(删除 \\
)。
但我仍然想知道问题出在哪里,因为将来我可能需要添加其他可能导致问题的值。
最佳答案
您遇到此问题是因为您的字符串的序列在正则表达式中被视为特殊序列。所以你需要转义/引用这个序列。这是所谓的 黑打 的 Perl:
\ | ( ) [ { ^ $ * + ? .
这将修复它(\Q..\E
将引用此类元字符):
foreach $key (keys %{$hash{$sub_hash}}){
$line =~ s/\Q$key\E/$hash{$csub_hash}{$key}/g;
}
关于regex - 无法识别的转义\m 在 PERL 的正则表达式错误中通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460425/