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

时间:2016-05-11 10:33:14

标签: c++ regex qt qstring

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

谢谢!

根据要求,提供更多细节:

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

分隔符:'+'

所需的输出:"a""+"

2 个答案:

答案 0 :(得分:1)

您希望使用带有正则表达式的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;
}

答案 1 :(得分:0)

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

https://stackoverflow.com/a/48977326/2660408