在QregularExpression中查看断言

时间:2017-01-12 18:44:06

标签: c++ regex qt

QRegularExpression是否在其正则表达式引擎中提供了前瞻性的断言? 我已经测试了这个例子,我没有匹配的字符串。

QString s = "px1 pt 2px 3em 4px";
QRegularExpression re("\\d(?=px)");
auto match = re.match(s);
qDebug()<< match.lastCapturedIndex();

,结果是0。

2 个答案:

答案 0 :(得分:1)

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

\d+(?=px)

而不是

\\d(?=px)

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

我不确定lookahead是否适用于该正则表达式引擎,但如果不能,则可以使用此

(\d+)px

请参阅以下示例:

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

答案 1 :(得分:1)

QRegularExpression使用PCRE正则表达式,因此它支持前瞻,后观,甚至是懒惰的量词。在您的情况下,只有整个匹配值,没有捕获,因此请使用match.captured(0)来访问该值。

使用

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)模式仅在跟随px文字字符序列后才匹配1位数。