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

标签 regex perl

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

相关文章:

regex - 如何转义 CSV 中的双引号?

c - 仅从 C 代码中提取函数名称及其注释

function - 有没有办法在 perl 中将函数声明为变量?

perl - 如何使用 Perl 在表格中显示数据?

c++ - 如何将 perl + cpp 转换为独立应用程序

php - 使用 Perl 进行 UI 开发的最佳方法

javascript - 使用正则表达式查找 ![image](url)

java - "IllegalFormatConversionException: d != java.lang.String"用0填充数字时?

php - 字符串的正则表达式,必须至少包含 14 个字符,其中至少 2 个是数字,至少 6 个是字母

java - Java 中的正则表达式,用于匹配新行中出现结尾的模式