Задача: нужно выделить в строке подстроки, ограничивающиеся символами-разделителями. Но есть некоторые тонкости:
- Символы-разделители могут быть разные. Примерный набор: " .,;:-?!/\".
- В строках могут встречаться кавычки. Все что заключено между двумя кавычками - это отдельная подстрока, и символы-разделители в ней остаются как есть (то есть, разбивки внутри таких подстрок делать не нужно, «схлопывать» символы-разделители тоже в таких подстроках ненужно).
- В исходной строке подстрок в кавычках может быть несколько.
- Если кавычек нечетное количество, выделяются подстроки в парных кавычках, и подстрокой считается часть строки со следующего знакосимвола после последней кавычки до конца строки.
Решение нужно с поддержкой кириллицы (UTF-8) для использования в опенсорчной кроссплатформенной Qt-only программе (минимум Linux, Windows, MacOS, FreeBSD, Android). Поэтому что-то наподобе re2c рассматриваю только в том случае, если есть готовое решение по интеграции библиотеки в код программы.
Примеры, как должно работать разбиение:
0. Строка: Один два, три
Один
два
три
1. Строка: Один, два, три
Один
два
три
2. Строка: Один-два, три
Один
два
три
3. Строка: "Один два" три
Один два
три
4. Строка: "Один-два" три
Один-два
три
5. Строка: "Один-два" "три четыре
Один-два
три четыре
6. Строка: "Один-два" три, "четыре
Один-два
три
четыре
7. Строка: "Один-два" три "четыре! пять"
Один-два
три
четыре! пять