c++ - 拆分 QString 时如何转义分隔符?

标签 c++ regex qt qstring

我如何将 QString 拆分为一个字符,例如:'+' 并且当该字符被转义时不拆分:'\+'?

谢谢!

根据要求,提供更多详细信息:

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

分隔符:'+'

期望的输出:"a", "+"

最佳答案

您需要使用 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;
}

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

相关文章:

c++ - 如何在Qt中传递值?

c++ - Qt C++ : Include all library files in project folder

c++ - 使用 libcurl 调用 Amazon s3 RESTful 服务

c++ - OpenGL 旋转 2D 纹理

c++ - 将 FreeImage 链接为 VS2010 中的静态库?

javascript - 从用户提交的文本中获取属性!正则表达式?

C++变量声明和初始化规则

c# - 为什么使用 Regex.IsMatch 检查此字符串会导致 CPU 达到 100%?

javascript - 如何在冒号上拆分此行(在 JavaScript 中),除非冒号前面有 http 或 https?

c++ - 从样式表更改为默认样式