QRegularExpressionへの切り替えを開始しました。これを使用して、複数の区切り文字で文字列をトークン化しています。私は驚くべき動作に遭遇しました。これはバグであるようです。私はWindows上でQt 5.5.1を使用しています。ここでQRegularExpressionの予期しない動作
はサンプルコードです:
#include <QRegularExpression>
#include <QString>
#include <QtDebug>
int main(int argc, char *argv[])
{
Q_UNUSED (argc);
Q_UNUSED (argv);
QRegularExpression regex ("^ ");
qDebug() << "Expected: " << QString ("M 100").indexOf(regex);
qDebug() << "NOT expected:" << QString ("M 100").indexOf(regex, 1);
qDebug() << "Expected: " << QString (" 100").indexOf(regex);
QRegularExpression regex1 (" ");
qDebug() << "Expected: " << QString ("M 100").indexOf(regex1);
}
そして出力:
Expected: -1
NOT expected: -1
Expected: 0
Expected: 1
キャレット(^)の使用 "のindexOf" コールに0以外の開始位置で使用した場合され表現が一致しないようにします。直感的に、私はキャレットが指定した位置の文字列と一致することを期待しました。代わりに、それは単に決して一致しません。
この問題を回避するために、splitRrefを使用するようにトークンを切り替えるつもりです。とにかくそれはややクリーナーでしょうが、これが正しい動作か、Qtにバグを報告する必要があるかどうかを理解する必要があります。
UPDATE:一部のトークンが浮動小数点数であるかどうかを検出するために正規表現を使用する必要があり、QStringRefでQRegularExpressionを使用できないため、splitRefを使用しても問題は完全に解決されません。その可能性のために、私はQStringRefトークンを実際のQStringに変換しなければなりませんでした。これは私が最初に避けようとしていたものでした。
まあ、^文字列の最初の文字に一致し、そしてありがとう最初の文字 – infixed