방금 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에 버그를보고해야 하는지를 이해해야합니다.
업데이트 : 일부 토큰이 부동 소수점 숫자인지 확인하기 위해 정규 표현식을 사용해야하므로 splitRef를 사용하여 완전히 문제를 해결할 수없고 QStringRef와 함께 QRegularExpression을 사용할 수 없습니다. 그 가능성을 위해, 나는 QStringRef 토큰을 실제 QString으로 변환해야하는데, 그것은 내가 처음에 피하려고했던 것이었다.
음,^문자열의 첫 번째 문자와 일치하고, 1 – infixed