Я думаю об использовании регулярного выражения [0-9a-zA-Z]+
соответствовать любой буквенно-цифровой строке в библиотеке регулярных выражений стандартной библиотеки C ++.
Но я беспокоюсь о мобильности. Конечно, в наборе символов ASCII это будет работать, и я думаю, что 0-9
должен сопоставлять только цифры в любой системе кодирования, поскольку стандарт настаивает на том, что все кодировки имеют это свойство. Но стандарт C ++ не настаивает на кодировке ASCII, поэтому моя часть a-zA-Z может дать мне странные результаты на некоторых платформах; например, с кодировкой EBCDIC.
Я мог бы использовать \d
для цифровой части, но это также соответствует арабским цифрам.
Какие должен Я использую для полностью переносимого регулярного выражения, которое соответствует только цифрам и буквам английского алфавита в любом случае?
Похоже, что PCRE (текущей версией которого является PCRE2) поддерживает другие типы кодирования, включая EBCDIC.
В исходном коде на их сайте я нашел «этот файлсо следующим (форматирование мое):
Программа под названием dftables (которая распространяется с PCRE2) может использоваться для создания альтернативных версий этот файл. Это необходимо, если вы работаете в среде EBCDIC, или если вы хотите использовать другую кодировку по умолчанию, например, ISO-8859-1. При запуске dftables эти таблицы создаются в текущей локали. Если PCRE2 настроен с
--enable-rebuild-chartables
это происходит автоматически.
Ну, если вы беспокоитесь о поддержке экзотических кодировок, вы можете просто перечислить все символы вручную:
[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]+
Это выглядит немного грязно, но наверняка это будет работать везде.