QRegularExpression和QRegExp之间有什么区别吗?

时间:2015-04-09 07:52:03

标签: c++ qt qt5 qregexp

我看到正则表达式有一个新类 - QRegularExpression。它只是QRegExp的typedef,还是新类,还是什么?为什么我们需要它,我们已经有了QRegExp?

2 个答案:

答案 0 :(得分:41)

好的,经过对文档的深入挖掘后,我发现它确实是一个新类,它有改进,但它只在Qt5中可用,所以如果你想在两个文件上编译,你就不能使用它Qt4和Qt5:

  

QRegExp用户注意事项

     

Qt 5中引入的QRegularExpression类是QRegExp的一个重大改进,提供的API,支持的模式语法和执行速度。最大的区别是QRegularExpression只需要一个正则表达式,,并且在请求匹配时它不会被修改。而是返回一个QRegularExpressionMatch对象,以便检查匹配的结果并提取捕获的子字符串。这同样适用于全局匹配和QRegularExpressionMatchIterator。

答案 1 :(得分:1)

至少对于Qt 4.8。我可以非常实际地使用QRegularExpressions代替QRegExp

这些看起来对你很危险吗?

int index = myQString.indexOf(myQRegExp);
bool okay = myQString.contains(myQRegExp);

这两行都可能损坏您的堆,崩溃或挂起您的应用程序。我经历了堆腐败并挂起Qt 4.8。博文QString::indexOf() versus Qt 4.5解释了QString::indexOf()修改了const QRegExp对象。 QString::contains()内联QString::indexOf()因此问题也是如此。

如果您坚持使用Qt4并因此使用QRegExp,则可以使用

int index = myQRegExp.indexIn(myQString);
bool okay = (myQRegExp.indexIn(myQString) != -1); 

在您的来源中。或修补Qt来源。

相关问题