gpt4 book ai didi

perl - 如何替换一组搜索/替换对?

转载 作者:行者123 更新时间:2023-12-02 06:36:19 24 4
gpt4 key购买 nike

我有一个翻译字典作为哈希:

my %dict = { hello => 'hola', goodbye => 'adios' , ... }

(实际用例不是人类语言翻译!我正在用其他一些值替换大量标记。这只是示例。)

如何将其中的每一个应用于字符串?显然我可以循环它们并将每个传递给 s/$key/$value/但是然后我必须引用它们,这样如果搜索或替换(例如) / 就不会中断。在里面。

在 PHP 中有 strtr($subject, $replacement_pairs_array) - Perl 中是否有类似的东西?

最佳答案

首先,您的散列初始化已关闭:散列被初始化为一个列表:

my %dict = ( hello => 'hola', goodbye => 'adios' , ... );

或者您可以使用哈希引用:
my $dict = { hello => 'hola', goodbye => 'adios' , ... };

这是一个标量。

用字符串中的值替换键很容易:
s/$_/$dict{$_}/g for keys %dict;

除非
  • 替换的内容不应被替换,例如%dict = (a => b, b => c)应该转换 "ab""bc" (不是"cc",因为上述解决方案可能会也可能不会,哈希顺序是随机的)。
  • 键可以包含正则表达式元字符,如 . , + , 或 () .这可以通过使用 quotemeta 转义正则表达式元字符来规避。功能。

  • 传统的方法是构建一个匹配所有键的正则表达式:
    my $keys_regex = join '|', map quotemeta, keys %dict;

    然后:
    $string =~ s/($keys_regex)/$dict{$1}/g;

    这解决了所有这些问题。

    在正则表达式构建代码中,我们首先使用 map quotemeta 转义所有键。 , 然后用 | 连接字符串构建匹配所有键的正则表达式。由此产生的正则表达式非常有效。

    这保证了字符串的每一部分只被翻译一次。

    关于perl - 如何替换一组搜索/替换对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17596917/

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