9

私はこのクイズ アプリケーションを持っており、人々が入力したものと正しい答えを一致させます。今のところ、私がしていることは基本的に次のとおりです。

if ($input =~ /$answer/i) {
     print "you won";
}

答えが「魚」であるかのように、ユーザーが「魚」と入力すると、良い答えとしてカウントされるので、これは素晴らしいことです。

私が直面している問題は、私がフランス人であるため、ユーザーが「taton」と入力し、答えが「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/真になります。

4

2 に答える 2

14

CPANのText::Unaccentモジュール(またはText :: Unaccent :: PurePerl )を試してください。

于 2008-12-22T16:05:34.677 に答える
0

これは、正規表現を呼び出す適切な機会とは思えません。受け入れ可能な回答のリストに加えて、「a」、「the」、および言語固有の同等語などの不要な単語を削除するためのフィルタリングが必要です。

何をするにしても、文字エンコーディングと言語を認識しなければならないことは明らかです。通常、正規表現はどちらでもありません。

于 2009-01-28T04:24:57.200 に答える