拆分 QString 时如何转义分隔符?

How to escape the delimiter when splitting a QString?

如何将 QString 拆分为一个字符,例如:'+' 并且当该字符被转义时不拆分:'\+'?

谢谢!

应要求,更详细一些:

要拆分的字符串:"a+\+"

分隔符:'+'

期望的输出:"a", "+"

您需要使用带有正则表达式的 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,也没有Boost,你可以使用QRegExp:

QRegExp bar("((?:[^\\\+]|\\.)*)");

for(int it = bar.indexIn(foo, 0); it >= 0; it = bar.indexIn(foo, it)) {
    cout << bar.cap(1).toStdString() << endl;
}

如果您可以使用 space 作为分隔符而不是“+”作为分隔符...splitArgs 为您完成工作: