Книга: Linux программирование в примерах

13.4.3. Языки

13.4.3. Языки

Языковые проблемы управляются локалью. Ранее в главе мы уже видели setlocale() POSIX предоставляет продуманный механизм для определения правил, посредством которых работает локаль; некоторые подробности см. в справочной странице GNU/Linux locale(5), а полностью — в самом стандарте POSIX.

Правда в том, что подробности на самом деле не нужны. Вам, как разработчику программ, не нужно беспокоиться о них; как заставить все работать, зависит от разработчиков библиотек. Все, что нужно, это понять концепции и использовать в своем коде соответствующие функции, такие, как strcoll() (см. раздел 13.2.3 «Сравнение строк: strcoll() и strxfrm()»).

Современные системы GLIBC предоставляют отличную поддержку локалей, включая поддерживающие локали процедуры сопоставления регулярных выражений. Например, расширенное регулярное выражение POSIX [[:alpha:]][[:alnum:]]+ соответствует букве, за которой следуют одна или более букв или цифр (алфавитный символ, за которым следуют один или более алфавитно-цифровых символов). Определение того, какие символы соответствуют этим классам, зависит от локали. Например, это регулярное выражение соответствовало бы двум символам 'e?', тогда как регулярное выражение [a-zA-Z][a-A-Zz0-9]+ традиционного, ориентированного на ASCII Unix — скорее всего нет. Классы символов POSIX перечислены в табл. 13.5.

Таблица 13.5. Классы символов регулярных выражений POSIX

Класс Соответствует
[:alnum:] Алфавитно-цифровые символы
[:alpha:] Алфавитные символы
[:blank:] Символы пробела и табуляции.
[:cntrl:] Управляющие символы
[:digit:] Цифровые символы
[:graph:] Символы, являющиеся одновременно печатными и видимыми. (Символ конца строки печатный, но не видимый, тогда как $ является и тем, и другим.)
[:lower:] Строчные алфавитные символы
[:print:] Печатные (не управляющие) символы
[:punct:] Знаки пунктуации (не буквы, цифры, управляющие или пробельные символы)
[:space:] Пробельные символы (такие, как сам пробел, символы табуляции, конца строки и т.д)
[:upper:] Заглавные алфавитные символы
[:xdigit:] Символы из набора abcdefABCDEF0123456789

Оглавление книги


Генерация: 0.288. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз