QRegularExpression
是否在其正则表达式引擎中提供了前瞻性的断言?
我已经测试了这个例子,我没有匹配的字符串。
QString s = "px1 pt 2px 3em 4px";
QRegularExpression re("\\d(?=px)");
auto match = re.match(s);
qDebug()<< match.lastCapturedIndex();
,结果是0。
答案 0 :(得分:1)
为什么你的第二行会有额外的反斜杠?为什么不用
\d+(?=px)
而不是
\\d(?=px)
我添加+的原因是因为 \ d 只捕获1位数, + 允许它捕获一个或多个
我不确定lookahead是否适用于该正则表达式引擎,但如果不能,则可以使用此
(\d+)px
请参阅以下示例:
答案 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位数。