正規表現用の新しいクラスがあるようです - QRegularExpression
. それは QRegExp の typedef なのか、それとも新しいクラスなのか、それとも何なのか? そして、なぜそれが必要なのですか? QRegExp は既にあるのでしょうか?
2 に答える
わかりました、ドキュメントをさらに掘り下げた後、それは本当に新しいクラスであり、改善されていることがわかりましたが、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() vs Qt 4.5QString::indexOf()
は、オブジェクトを変更することを説明していconst QRegExp
ます。QString::contains()
インラインQString::indexOf()
なので、同じ問題です。
Qt4、つまり QRegExp に行き詰まっている場合は、使用できます
int index = myQRegExp.indexIn(myQString);
bool okay = (myQRegExp.indexIn(myQString) != -1);
代わりにあなたのソースで。または、Qt ソースにパッチを適用します。