Тема: Глюк при роботі Regex з українською абеткою
Пишу код, який має прибирати всі нелітери зі слова. Це потрібно для сортування за абеткою.
Натрапив на цікаву поведінку Regex при обробці української абетки.
Ось код для тесту(має зникати лише апостроф після літери «В»):
string start_word {"АБВ'ГҐДЕЄЖЗІИЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯабвгґдеєжзіиїйклмнопрстуфхцчшщьюя"};
string result_word;
//regex re {"(\W)"};
//regex re {"[^А-ЩЬЮЯҐЄІЇа-щьюяґєії]"};
regex re {"[^АБВГҐДЕЄЖЗІИЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯабвгґдеєжзіиїйклмнопрстуфхцчшщьюя]"};
string replacement {""};
result_word = regex_replace(start_word, re, replacement);
cout << result_word << endl;
Перша формула Regex("(\W)") взагалі не працює чомусь, як я зрозумів.
Треба лише вказувати діапазон літер (A-Z, наприклад).
Хоча в Пайтон така формула добре працювала для будь-якої абетки.
Друга формула працює лише частково.
Якщо запустити цей код і поглянути на вивід до консолі,
то можна побачити, що після літери «п»(лише маленької) чомусь зникає кілька літер.
Замість них з'являється знак питання в квадратику.
Якщо використати третю формулу, усе працює чудово.
Чому діапазон «а-щ» не працює як слід?
Чи є в Regex для C++ короткий запис усіх літер(нелітер) будь-якої абетки?