Qt 的正则表达式与预期不匹配

Regular expression of Qt don't match as expected

为什么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)"

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

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

  • QRegExp: implements multiple regular expression forms, see QRegExp::PatternSyntax

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

注意 QRegularExpression is the recommended one:

The QRegularExpression class introduced in Qt 5 is a big improvement upon QRegExp, in terms of APIs offered, supported pattern syntax and speed of execution.

有关 QRegExpQRegularExpression 之间差异的详细概述,请参阅 docs