Я пытаюсь использовать стандартную библиотеку <regex>
для сопоставления некоторых кириллических слов:
// This is a UTF-8 file.
std::locale::global(std::locale("en_US.UTF-8"));
string s {"Каждый охотник желает знать где сидит фазан."};
regex re {"[А-Яа-яЁё]+"};
for (sregex_iterator it {s.begin(), s.end(), re}, end {}; it != end; it++) {
cout << it->str() << "#";
}
Однако это не похоже на работу. Приведенный выше код приводит к следующему:
Кажд�#й#о�#о�#ник#желае�#зна�#�#где#�#иди�#�#азан#
вместо ожидаемого:
Каждый#охотник#желает#знать#где#сидит#фазан
Код символа «�» выше — \321
.
Я проверил регулярное выражение, которое использовал с grep
, и оно работает, как и ожидалось. Моя локаль en_US.UTF-8
. И GCC, и Clang дают одинаковый результат.
Есть ли что-то, что я упускаю? Есть ли способ "приручить" <regex>
, чтобы он работал с кириллическими символами?
std::wstring
илиstd::u32string
,std::wregex
илиboost::u32regex
и так далее? - person John Ding   schedule 03.03.2020wstring
и др. помогло. Если вы не возражаете, я вскоре отвечу на свой вопрос, используя эти знания. - person undercat   schedule 03.03.2020