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-
字符串的开头,后跟零个或多个任意值的字符,最后是字符串的结尾。
我做错了什么?我想在 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-
字符串的开头,后跟零个或多个任意值的字符,最后是字符串的结尾。