0

我究竟做错了什么?我想在 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();
}
4

1 回答 1

5

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

bla-*

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

QStringList::indexOf各州的文档(我的重点)...

返回列表中第一个精确匹配的 re 的索引位置,从索引位置开始向前搜索。如果没有匹配项,则返回 -1

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

^bla-*$

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

bla-.*

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

于 2019-11-25T09:40:30.507 回答