Perl中的y运算符执行逐个字符的音译。例如,如果我们对字符串“foobar”执行y / abc / dfg,则会得到“foofdr”。但是,如果我想将“ā”音译为“ei”,将“ä”音译为“a:”,将“ō”音译为“әu”,将“o”音译为“ɒ”。
我尝试了以下代码行,但没有运气:(
y/āäōo/(ei)(a:)(әu)ɒ/
我们希望有解决此问题的方法吗?或者我是否必须重复使用s运算符并进行大量繁琐的替换?
提前感谢任何指导:)
答案 0 :(得分:14)
在这种情况下,创建一个哈希并轻松地从键到字符串。
use warnings;
use strict;
use utf8;
binmode STDOUT, ":utf8";
my $string = "āäōo";
my %trans = qw/ā ei ä a: ō u o ɒ/;
my $keys = join '', keys %trans;
$string =~ s/([$keys])/$trans{$1}/g;
print "$string\n";
如果您的密钥长度超过一个字符,则需要通过按长度递减的顺序对密钥进行排序并使用( | | )
而不是[ ]
加入密钥来更改此字段。
答案 1 :(得分:0)
听起来你正在尝试做类似于Text::Unaccent::PurePerl的事情。