Немецкий умлаут и регулярные выражения

Я столкнулся с этим странным явлением суровых времен сейчас. Если я использую ifstream для подачи программы с содержимым файла и применяю регулярное выражение к входящим словам, немецкие буквы ä ö ü доставляют мне некоторые трудности. Если какой-либо из них появляется в начале слова, регулярное выражение не может их распознать, но не в том случае, если в слове присутствует какая-либо из этих букв. Итак, эти строки

string word = "über";
regex check {R"(\b)" + word + R"(\b)", regex_constants::icase};
string search = "Es war genau über ihm.";

не будет работать, потому что регулярное выражение не может найти über в строке поиска. Тем не мение,

string word = "für";
regex check {R"(\b)" + word + R"(\b)", regex_constants::icase};
string search = "Es war für ihn.";

будет работать, потому что слово появляется в слове. Почему это так и как я могу это исправить? Я думал о замене каждого ü на ue, каждого ä на ae и каждого ö на oe, а затем отменил замену, но есть ли еще одна возможность? Я работаю с Visual Studio 2015.

2

Решение

использование regex check {"(^|[\\x60\\x00-\\x2f\\x3a-\\x40\\x5b-\\x5e\\x7b-\\x7e])über($|[\\x60\\x00-\\x2f\\x3a-\\x40\\x5b-\\x5e\\x7b-\\x7e])", regex_constants::icase}; вместо.

Грамматика по умолчанию в C ++ regex похожа на JavaScript. \b не поддерживает Unicode.

И от microsoft.com:

Слово Граница

Граница слова встречается в следующих ситуациях:

  • Текущий символ находится в начале целевой последовательности и является одним из символов слова A-Za-z0-9_.

  • Текущая позиция символа находится за концом целевой последовательности, а последний символ в целевой последовательности является одним из
    слово символы.

  • Текущий символ является одним из символов слова, а предыдущий символ — нет.

  • Текущий символ не является одним из символов слова, а предыдущий символ является.

1

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

Других решений пока нет …

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