Переносимое регулярное выражение для сопоставления буквенно-цифровых символов

Я думаю об использовании регулярного выражения [0-9a-zA-Z]+ соответствовать любой буквенно-цифровой строке в библиотеке регулярных выражений стандартной библиотеки C ++.

Но я беспокоюсь о мобильности. Конечно, в наборе символов ASCII это будет работать, и я думаю, что 0-9 должен сопоставлять только цифры в любой системе кодирования, поскольку стандарт настаивает на том, что все кодировки имеют это свойство. Но стандарт C ++ не настаивает на кодировке ASCII, поэтому моя часть a-zA-Z может дать мне странные результаты на некоторых платформах; например, с кодировкой EBCDIC.

Я мог бы использовать \d для цифровой части, но это также соответствует арабским цифрам.

Какие должен Я использую для полностью переносимого регулярного выражения, которое соответствует только цифрам и буквам английского алфавита в любом случае?

0

Решение

Похоже, что PCRE (текущей версией которого является PCRE2) поддерживает другие типы кодирования, включая EBCDIC.

В исходном коде на их сайте я нашел «этот файлсо следующим (форматирование мое):

Программа под названием dftables (которая распространяется с PCRE2) может использоваться для создания альтернативных версий этот файл. Это необходимо, если вы работаете в среде EBCDIC, или если вы хотите использовать другую кодировку по умолчанию, например, ISO-8859-1. При запуске dftables эти таблицы создаются в текущей локали. Если PCRE2 настроен с --enable-rebuild-chartablesэто происходит автоматически.

0

Другие решения

Ну, если вы беспокоитесь о поддержке экзотических кодировок, вы можете просто перечислить все символы вручную:

[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]+

Это выглядит немного грязно, но наверняка это будет работать везде.

0

По вопросам рекламы [email protected]