Поскольку вопрос подразумевает, что у меня есть фрагмент кода с QRegularExpression, который работает. Он делает то, что должен, не вызывает ошибок и все в порядке.
Почему я пишу вопрос? Ну, все, что я нашел до сих пор, подразумевает, что мое выражение не должно работать, но ..... оно работает.
Главный вопрос моего вопроса заключается в \-
escape sybmol.
Я знаю, знаю, что это не определено. И во время компиляции я получаю warning: unknown escape sequence: '\-'
. И это предупреждение на самом деле ожидается.
Теперь рассмотрим следующий фрагмент кода. Не обращайте слишком много внимания на выражение, оно русское, но, к сожалению, я заметил эту странную вещь в этом выражении.
Я не публикую больше ничего, потому что, как бы странно это ни звучало - это работает, как хотелось бы.
Я действительно хочу понять, почему - учитывая, что я получаю предупреждение.
Выражение ниже.
//Capture russian endings
QRegularExpression RU_ENDINGS("([а-я\-]+[бвгджзклмнпрстфхчцшщ])([еиоы][й]|[аия][я]|[иую][ю]|[еиоы][е]|[аоеиы][м][иу]|[ое][г][о]|(?<!ост)и?[аеиоыя]м|ост[а-яё]{1,3}|(?<!остиям)(?>и|ь.?)|[ао]в|н[аеио]|с[ая]|[ео][вк]|[иы]х|[ие]ну|[иуя]т|(?<![аеёиоуыэюя]{2})[аеёоуыэюя]+|и{2})$", QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::MultilineOption);
Как я уже сказал, я получаю желаемое поведение. В русских словах с символом «-» символ фактически сожран частью [а-я\-]+
. Если его там нет - -
не сожрал.
Все, что я нашел, говорит о том, что оно не должно работать, но оно работает.
ОБНОВЛЕНИЕ
В предложенном дубликате Regex не работал.
В моем вопросе четко сказано, что мой regex работает, я просто не мог понять, почему он работал так, как хотелось бы, учитывая предупреждение, которое я получил во время компиляции. Весь предоставленный код использовался как есть и работал.
Более того, вопрос не имеет ничего общего с std :: regex, также ниже был дан правильный ответ на вопрос с правильным объяснением.
Вопрос может быть дубликатом, но он, безусловно, не является дубликатом предложенного вопроса.