QRegularExpression和QRegExp之间有什么区别吗

Is there any difference between QRegularExpression and QRegExp?

本文关键字:什么 区别 之间 QRegExp QRegularExpression      更新时间:2023-10-16

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

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

QRegExp用户注意事项

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

至少对于Qt 4.8。我可以给出一个非常实用的理由来使用QRegularExpressions而不是QRegExp

你觉得这些危险吗?

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

这两行都可能损坏堆、崩溃或挂起应用程序。我经历了堆损坏,并坚持使用Qt 4.8。博客文章QString::indexOf()对比Qt4.5解释了QString::indexOf()修改const QRegExp对象。QString::contains()内联QString::indexOf(),所以这是相同的问题。

如果你被Qt4和QRegExp卡住了,你可以使用

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

相反,在您的来源中。或者修补Qt来源。