首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >展望QregularExpression中的断言

展望QregularExpression中的断言
EN

Stack Overflow用户
提问于 2017-01-12 18:44:06
回答 2查看 587关注 0票数 2

QRegularExpression是否在其regex引擎中提供前瞻性测试?我已经测试了这个例子,我没有得到匹配的字符串。

代码语言:javascript
复制
QString s = "px1 pt 2px 3em 4px";
QRegularExpression re("\\d(?=px)");
auto match = re.match(s);
qDebug()<< match.lastCapturedIndex();

结果是0。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-12 20:01:07

QRegularExpression使用PCRE,因此它支持查找头、后置查找,甚至是惰性的量词。在您的示例中,只有一个完整的匹配值,没有捕获,因此使用match.captured(0)访问该值。

使用

代码语言:javascript
复制
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"

只有在后面跟着\d+(?=px)文字字符序列时,1+模式才会匹配px数字。

票数 1
EN

Stack Overflow用户

发布于 2017-01-12 18:49:08

为什么你的第二行有一个额外的反斜杠?为什么不使用

代码语言:javascript
复制
\d+(?=px)

而不是

代码语言:javascript
复制
\\d(?=px)

我添加一个+的原因是因为\d只捕获1位数字,+允许它捕获一个或多个数字

我不确定查找在正则表达式引擎中是否有效,但是如果不能,您可以使用这个

代码语言:javascript
复制
(\d+)px

有关示例,请参见以下内容:

https://regex101.com/r/HgCwXp/1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41620665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档