我看到正则表达式有一个新类 - QRegularExpression
。它只是QRegExp的typedef,还是新类,还是什么?为什么我们需要它,我们已经有了QRegExp?
答案 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来源。