Oberon space

General Category => Общий раздел => Тема начата: ilovb от Май 01, 2013, 04:34:38 pm

Название: isalpha и локаль
Отправлено: ilovb от Май 01, 2013, 04:34:38 pm
В Lua регулярки используют сишную функцию isalpha. Как сделать чтобы русские буквы тоже обрабатывались?
Название: Re: isalpha и локаль
Отправлено: ilovb от Май 01, 2013, 04:50:54 pm
Вроде нашел как локаль установить:
Цитировать
print(os.setlocale('Russian_Russia.1251'))
local s = "  ю   g  "
print(s:match('%a'))

Но гадость не работает чегой-то :(
Название: Re: isalpha и локаль
Отправлено: ilovb от Май 01, 2013, 04:56:09 pm
Хм... Не работает в LuaJIT. В интерпретаторе все пашет как надо...
Название: Re: isalpha и локаль
Отправлено: Valery Solovey от Май 01, 2013, 06:23:47 pm
А почему локаль как-то нестандарнтно записывается?
Может, попробовать так: "ru_RU.UTF-8"?
Название: Re: isalpha и локаль
Отправлено: Valery Solovey от Май 01, 2013, 06:25:00 pm
или хотя бы вместо 1251 писать CP1251
Название: Re: isalpha и локаль
Отправлено: ilovb от Май 01, 2013, 06:52:00 pm
А там по разному можно. ".1251", "Russian" и т.д.
В интерпретаторе Lua работает. В LuaJIT нет (локаль переключается, но регулярки русские символы не воспринимают)

Если указывать "ru_RU.UTF-8" или "CP1251" то даже локаль не переключается
Название: Re: isalpha и локаль
Отправлено: ilovb от Май 01, 2013, 07:10:51 pm
"isalpha" в исходниках LuaJIT нет...
Вот подстава  :(
Название: Re: isalpha и локаль
Отправлено: ilovb от Май 01, 2013, 09:31:15 pm
Написал разработчику об этом. Он ответил что LuaJIT не поддерживает локали для регулярок, и в таких случаях нужно использовать диапазоны типа [А-я]