Регулярные выражения Perl с учетом локали (соответствующие границам слов) - PullRequest
4 голосов
/ 12 октября 2009

В настоящее время я немного застрял, когда получаю регулярное выражение в Perl (взятое из моего более раннего вопроса ) для сопоставления символов слова из локали, не входящей в ASCII (т. Е. Немецкие умлауты).

Я уже пробовал разные вещи, такие как установка правильного языкового стандарта (с использованием setlocale), преобразование данных, которые я получаю из MySQL в UTF8 (с использованием decode_utf8), и так далее ... К сожалению, безрезультатно. Гугл тоже сильно не помог.

Есть ли шанс получить следующее регулярное выражение с учетом локали, чтобы

$street = "Täststraße"; # I know that this is not orthographically correct
$street =~ s{
               \b (\w{0,3}) (\w*) \b
            }
            {
               $1 . ( '*' x length $2 )
            }gex;

возвращает $street = "Täs*******" вместо "Tästs***ße"?

1 Ответ

6 голосов
/ 12 октября 2009

Я ожидаю, что результат регулярного выражения в "Täs *******". И это то, что я получаю, когда я "использую utf8" в файле с кодировкой utf-8 с вашим кодом выше.

(Если все в латинице-1, это изменяет поведение механизма регулярных выражений. Отсюда и существование utf8::upgrade. См. Unicode :: Semantics .)

Редактировать: Я вижу, вы исправили свой пост и что мы согласны с ожидаемым результатом. В основном, используйте Unicode :: Semantics, когда вы хотите использовать семантику Unicode в своих регулярных выражениях.

...