如何将QString
分割为一个字符,例如:'+'
,并且在转义该字符时不要拆分:'\+'
?
谢谢!
根据要求,提供更多细节:
要拆分的字符串:"a+\+"
分隔符:'+'
所需的输出:"a"
,"+"
答案 0 :(得分:1)
您希望使用带有正则表达式的globalMatch
进行拆分,以便选择除了非转义'+'
之外的所有内容:
(?:[^\\\+]|\\.)*
所以给定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"));
在不幸的事件中你既没有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;
}
答案 1 :(得分:0)
如果您可以使用空格作为分隔符而不是“+”作为分隔符... splitArgs
可以为您完成工作: