首页 > 解决方案 > Qt 的正则表达式与预期不匹配

问题描述

为什么Qt的正则表达式有点不同?我可以在常规匹配软件中正确匹配,但不能在 Qt 中正确匹配。例如。

QString tstring = "scale(1.1) rotate(180) translate(1,0)";
QRegExp re("(?<=[\\)])."); 
QStringList tlist = tstring.split(re);

我想用空格分隔这三个以获得三个QString“scale(1.1)”,“rotate(180)”“translate(1,0)”

标签: c++qtqregexp

解决方案


存在不同的正则表达式语法。Qt 实现了其中的一些:

  • QRegularExpression(>= Qt5):实现 Perl 兼容的正则表达式

  • QRegExp: 实现多种正则表达式形式,见QRegExp::PatternSyntax

    • QRegExp::RegExp(默认):Qt 的正则表达式语言模仿 Perl 的正则表达式语言
    • QRegExp::Wildcard: 类似于 shell 使用的通配符。
    • QRegExp::W3CXmlSchema11:W3C XML Schema 1.1 规范的实现。
    • ...

请注意,这QRegularExpression是推荐的

Qt 5 中引入的 QRegularExpression 类在提供的 API、支持的模式语法和执行速度方面是对 QRegExp 的重大改进。

可以在docsQRegExp中找到和之间差异的详细概述。QRegularExpression


推荐阅读