拆分 QString 时如何转义分隔符?
How to escape the delimiter when splitting a QString?
如何将 QString
拆分为一个字符,例如:'+'
并且当该字符被转义时不拆分:'\+'
?
谢谢!
应要求,更详细一些:
要拆分的字符串:"a+\+"
分隔符:'+'
期望的输出:"a"
, "+"
您需要使用带有正则表达式的 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;
}
如果您可以使用 space 作为分隔符而不是“+”作为分隔符...splitArgs
为您完成工作:
如何将 QString
拆分为一个字符,例如:'+'
并且当该字符被转义时不拆分:'\+'
?
谢谢!
应要求,更详细一些:
要拆分的字符串:"a+\+"
分隔符:'+'
期望的输出:"a"
, "+"
您需要使用带有正则表达式的 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;
}
如果您可以使用 space 作为分隔符而不是“+”作为分隔符...splitArgs
为您完成工作: