C++ 拆分QString时如何转义分隔符?
如何按字符拆分C++ 拆分QString时如何转义分隔符?,c++,regex,qt,qstring,C++,Regex,Qt,Qstring,如何按字符拆分QString,例如:“+”,并且在转义该字符时不拆分:“\+” 谢谢 应要求,提供更多详细信息: 要拆分的字符串:“a++” 分隔符:“+” 所需的输出:“a”,“+”您将希望与正则表达式一起使用,以拆分除非转义的“+”之外的所有内容: (?:[^\\\+]|\\.)* 因此,给定QString foo,您可以使用 如果不幸的是您既没有Qt5,也没有C++11,也没有Boost,您可以使用: QRegExp条((((?:[^\+]\\\\\\\)*); for(int i
QString
,例如:“+”
,并且在转义该字符时不拆分:“\+”
谢谢
应要求,提供更多详细信息:
要拆分的字符串:“a++”
分隔符:“+”
所需的输出:“a”
,“+”
您将希望与正则表达式一起使用,以拆分除非转义的“+”之外的所有内容:
(?:[^\\\+]|\\.)*
因此,给定QString foo
,您可以使用
如果不幸的是您既没有Qt5,也没有C++11,也没有Boost,您可以使用:
QRegExp条((((?:[^\+]\\\\\\\)*);
for(int it=bar.indexIn(foo,0);it>=0;it=bar.indexIn(foo,it)){
cout如果您可以使用空格作为分隔符,而不是“+”作为分隔符…splitArgs
是否为您工作:
而“(?你能分享你的代码吗?添加了我想要实现的输入和输出。希望这会有帮助。这也应该适用于Qt4,使用QRegExp
类,而不是QRegularExpression
或者?因为这让我在拆分foo++
时有++
和拆分foo+bar++
e> 当它应该是foo、++/code>和foo、bar
@tobilocker时,您使用的命令是什么,因为这应该也适用于QRegExp
。因此QString值是:“EXPRESSION++”
并使用qstringlit valuesList=values.split(QRegExp((?:[^+\\\\\\\\\\\\]),QString::SkipEmptyParts);
。我得到:“+”
@tobilocker您未能正确复制正则表达式。您使用了右括号而不是右括号。感谢您指出这一点,但实际上它在代码中是正确的:)
QRegularExpression bar("((?:[^\\\\\\+]|\\\\.)*)");
auto it = bar.globalMatch(foo);
while(it.hasNext()){
cout << it.next().captured(1).toStdString() << endl;
}
regex bar("((?:[^\\\\\\+]|\\\\.)+)");
copy(cregex_token_iterator(foo.cbegin(), foo.cend(), bar, 1), cregex_token_iterator(), ostream_iterator<string>(cout, "\n"));
QRegExp bar("((?:[^\\\\\\+]|\\\\.)*)");
for(int it = bar.indexIn(foo, 0); it >= 0; it = bar.indexIn(foo, it)) {
cout << bar.cap(1).toStdString() << endl;
}