我如何将 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;
}
关于c++ - 拆分 QString 时如何转义分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37160022/