Вы хотите использовать globalMatch
с регулярным выражением для разделения, которое выбирает все, кроме неэкспериментированного '+'
:
(?:[^\\\+]|\\.)*
Live Example
Так дали QString foo
вы можете перемещаться по списку с помощью QRegularExpressionMatchIterator
:
QRegularExpression bar("((?:[^\\\\\\+]|\\\\.)*)");
auto it = bar.globalMatch(foo);
while(it.hasNext()){
cout << it.next().captured(1).toStdString() << endl;
}
В C++ 11 вы можете также использовать cregex_token_iterator
:
regex bar("((?:[^\\\\\\+]|\\\\.)+)");
copy(cregex_token_iterator(foo.cbegin(), foo.cend(), bar, 1), cregex_token_iterator(), ostream_iterator<string>(cout, "\n"));
Live Exampe
В прискорбном случае, если у вас нет ни Qt5, ни C++ 11, ни подталкивание, вы можете использовать QRegExp
:
QRegExp bar("((?:[^\\\\\\+]|\\\\.)*)");
for(int it = bar.indexIn(foo, 0); it >= 0; it = bar.indexIn(foo, it)) {
cout << bar.cap(1).toStdString() << endl;
}
While ' "\\ + (<\\\\?!)"' будет ш ork в большинстве случаев, он все равно будет терпеть неудачу в некоторых (когда '+' предшествует литерал '' \ ''). –
Не могли бы вы поделиться кодом, который у вас есть? –
Добавлен ввод и вывод, который я бы хотел достичь. Надеюсь, это поможет. – tobilocker