gpt4 book ai didi

regex - 无法识别的转义\m 在 PERL 的正则表达式错误中通过

转载 作者:行者123 更新时间:2023-12-01 10:09:19 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com