我做错了什么?我希望在QRegularExpression中找到一个字符串的索引,该索引与给定的QStringList匹配。
#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();
}发布于 2019-11-25 09:40:30
首先,考虑你的正则表达式..。
bla-*默认情况下,QRegularExpression使用与Perl兼容的语法。这意味着*字符是一个量词,需要前面原子的零或多个。在这种情况下,所讨论的原子只是前面的字符:-。因此,您的正则表达式是请求文本bla,后面是零或多个-字符。
QStringList::indexOf状态的文档(我的重点)..。
返回列表中re的第一个精确匹配的索引位置,从索引位置开始搜索。返回-1如果没有匹配项
这有点让人困惑,但在这种情况下,短语exact match似乎表明,在正则表达式周围假定有隐含的开始和结束锚点。所以你实际上是在要求一个匹配的..。
^bla-*$也就是说,文本bla在字符串的开头,后面跟着零个或多个-字符,然后是字符串的末尾。所以在这个案子里没有匹配。通过切换到..。
bla-.*您将在字符串的开头请求匹配bla-,后面是任何值的零或多个字符,最后是字符串的结尾。
https://stackoverflow.com/questions/59028229
复制相似问题