QStringList 没有 return 由 QRegularExpression 索引

QStringList does not return index by QRegularExpression

我做错了什么?我想在 QStringList 中找到与给定 QRegularExpression 匹配的字符串的索引。

#include <QCoreApplication>
#include <QStringList>
#include <QRegularExpression>
#include <QDebug>

 int main(int argc, char *argv[])
 {
    QCoreApplication a(argc, argv);

    QStringList list{"bla-bla-bla"};

    qDebug() //Prints "true"
        << QRegularExpression("bla-*").match(list[0]).hasMatch();
    qDebug() //Prints "-1", but I want it was "0" here
        << list.indexOf(QRegularExpression("bla-*"));

    return a.exec();
}

首先,考虑你的正则表达式...

bla-*

QRegularExpression 默认使用 Perl 兼容语法。这意味着 * 字符是一个量词,需要零个或多个前面的原子。在这种情况下,所讨论的原子只是前面的字符:-。因此,您的正则表达式要求文本 bla 后跟零个或多个 - 个字符。

QStringList::indexOf 的文档指出(我的重点)...

Returns the index position of the first exact match of re in the list, searching forward from index position from. Returns -1 if no item matched

这有点令人困惑,但在这种情况下,短语 exact match 似乎暗示在正则表达式周围假定隐式开始和结束锚点。因此,您实际上是在要求匹配...

^bla-*$

即字符串开头的文本 bla 后跟零个或多个 - 字符,然后是字符串的结尾。所以在这种情况下没有匹配。通过切换到...

bla-.*

您要求匹配 bla- 字符串的开头,后跟零个或多个任意值的字符,最后是字符串的结尾。