Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QregularExpression中的前瞻断言_C++_Regex_Qt - Fatal编程技术网

C++ QregularExpression中的前瞻断言

C++ QregularExpression中的前瞻断言,c++,regex,qt,C++,Regex,Qt,QRegularExpression是否在其正则表达式引擎中提供前瞻性关联? 我已经测试了这个示例,但没有得到匹配的字符串 QString s = "px1 pt 2px 3em 4px"; QRegularExpression re("\\d(?=px)"); auto match = re.match(s); qDebug()<< match.lastCapturedIndex(); QString s=“px1 pt 2px 3em 4px”; QRegularExpress

QRegularExpression
是否在其正则表达式引擎中提供前瞻性关联? 我已经测试了这个示例,但没有得到匹配的字符串

QString s = "px1 pt 2px 3em 4px";
QRegularExpression re("\\d(?=px)");
auto match = re.match(s);
qDebug()<< match.lastCapturedIndex();
QString s=“px1 pt 2px 3em 4px”;
QRegularExpression re(\\d(?=px)”;
自动匹配=重新匹配;

qDebug()为什么在第二行中有一个额外的反斜杠?为什么不使用

\d+(?=px)
而不是

\\d(?=px)
我之所以添加a+,是因为\d只能捕获一个数字,+允许它捕获一个或多个数字

我不确定lookahead是否能在regex引擎中工作,但如果不能,你可以使用这个

(\d+)px
请参见以下示例:

使用PCRE正则表达式,因此它支持lookaheads、lookbehinds,甚至懒散量词。在您的情况下,只有一个完整的匹配值,没有捕获,因此使用
match.captured(0)
访问该值

使用

QRegularExpression re(\\d+(?=px)”;
QRegularExpressionMatchIterator i=re.globalMatch(“px1 pt 2px 3em 4px”);
英语单词;
while(i.hasNext()){
QRegularExpressionMatch=i.next();
QString word=match.captured(0);

因为斜杠是转义字符。谢谢你的例子,这是一个非常好的站点。但是为什么要转义\d?如果你在\d中转义,\n那么你的正则表达式现在寻找的是文字\后跟d,而不是\d的含义(范围从0到9,[0-9])视图@ MasLo:因为在一个C++字符串中,反斜杠需要被释放。在一个字符串<代码> \d>代码>中将是一个转义序列,如“代码> > \n>代码>换行符(不是<代码> \d>代码>是一个有效的转义序列,但这不是重点)。Qt支持LokAkHead。但是您的代码不起作用。我创建了“PX”。表达式应该在括号中。因此我编辑了您的答案。非常感谢您的回答。不,您不需要在
px
周围使用捕获组。这是不必要的,因为您只想获取数字,它们存储在
匹配中。捕获(0)
(第零项)。您没有使用我的代码,好吧,但捕获
px
仍然没有意义。然后捕获数字。是的。您的代码是正确的。我想我应该检查我的代码。
QRegularExpression re("\\d+(?=px)");
QRegularExpressionMatchIterator i = re.globalMatch("px1 pt 2px 3em 4px");
QStringList words;
while (i.hasNext()) {
    QRegularExpressionMatch match = i.next();
    QString word = match.captured(0);
    words << word;
}
// words contains "2", "4"