我怎么可以忽略的口音的时候比较串在Perl?
-
23-08-2019 - |
题
我有这个测验应用程序,在那里我的比赛什么人类正确的答案。现在,我要做的就是基本上是:
if ($input =~ /$answer/i) {
print "you won";
}
它是好的,因为如果答案是"鱼类"用户可以输入"鱼"和计算一个很好的答案。
这个问题,我们面临的是,嗯,我的用户,因为我是法国人,我希望能够接受,也就是说,一个用户输入"托顿怀特",并回答是"tâton".
所以,有什么我能做的,就是:
use POSIX qw(locale_h);
use locale;
setlocale(LC_TYPE, "fr_FR.ISO8859-15");
setlocale(LC_COLLATE, "fr_FR.ISO8859-15");
在我的检查程序,做:
$input = lc($input);
$input =~ tr/àáâãäåçèéêëìíîïñòóôõöùúûüýÿ/aaaaaaceeeeiiiinooooouuuuyy/;
和一些同样的答复。
我不喜欢它,因为我有硬代码的事情,并且有一天我决定我留下的ISO-8859-15世界UTF-8的世界,我是注定要失败。
因此,我在寻找一种方式比较串,这将使 "tâton" eq "taton"
, "maçon" eq "macon"
或 "macon" =~ /maçon/
是真实的。
解决方案
尝试 文字的::Unaccent 模块从支持(或 文字的::Unaccent::PurePerl).
其他提示
这似乎并不像调用正则表达式一个适当的场合 - 你应该简单地具有可接受答案的列表,加上一些过滤去除,如“一”,“中”,和他们的特定语言的等效不必要的话。
不管你做什么,似乎很明显,我认为它必须是字符编码感知和语言感知。正则表达式通常是既不。
不隶属于 StackOverflow