正規表現用の新しいクラス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()と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ソースにパッチを適用します。