sas*_*alm 42
好的,经过一些深入研究文档,我发现它确实是一个新类,它有改进,但它只在Qt5中可用,所以如果你想在Qt4和Qt5上编译你就不能使用它:
QRegExp用户注意事项
Qt 5中引入的QRegularExpression类是QRegExp的一个重大改进,提供的API,支持的模式语法和执行速度.最大的区别是QRegularExpression只保存一个正则表达式,并且在请求匹配时不会修改它.而是返回一个QRegularExpressionMatch对象,以便检查匹配的结果并提取捕获的子字符串.这同样适用于全局匹配和QRegularExpressionMatchIterator.
至少对于 Qt 4.8 来说是这样。我可以给出一个非常实际的理由来QRegularExpressions
代替QRegExp
:
这些对你来说看起来危险吗?
int index = myQString.indexOf(myQRegExp);
bool okay = myQString.contains(myQRegExp);
Run Code Online (Sandbox Code Playgroud)
这两行代码都可能会损坏您的堆、使您的应用程序崩溃或挂起。我在 Qt 4.8 中经历了堆损坏和挂起。博客文章QString::indexOf() 与 Qt 4.5解释了QString::indexOf()
修改const QRegExp
对象。QString::contains()
内联QString::indexOf()
所以这是同样的问题。
如果您受困于 Qt4 和 QRegExp,您可以使用
int index = myQRegExp.indexIn(myQString);
bool okay = (myQRegExp.indexIn(myQString) != -1);
Run Code Online (Sandbox Code Playgroud)
相反,在您的来源中。或者修补 Qt 源。