qt正则表达看后面

时间:2018-05-01 15:17:29

标签: regex qt qregularexpression

我的正则表达式:(?<=defining\s)[^;]*

在以下情况下,

应尝试查找var

   defining var;
some text defining var;

我使用一些在线工具测试了正则表达式。不幸的是,由于某种原因,它无法与Qt一起使用。正则表达式有问题还是我应该在代码中的其他地方查找错误?这很奇怪,因为正规表达没有看后工作。

额外: 有点偏离主题,但是因为我已经在写这个问题了:我如何更改我的正则表达式,以便它可以在以下情况下找到包含多个空格的var:

some text defining      var;

现在它找到除了一个空格和var。

之外的所有空格

1 个答案:

答案 0 :(得分:1)

您可以匹配要获取的值左侧的上下文,并将后者捕获到捕获组中:

QRegularExpression regex("defining\\s+([^;]+)");
QRegularExpressionMatch match = regex.match(str);
QString textYouWant = match.captured(1);

此处,defining\\s+([^;]+)匹配defining,然后匹配1 +空白字符,然后将除;以外的1个字符捕获到第1组(您可以使用.captured(1)访问)。

请参阅this regex demo

请注意,QRegularExpression是PCRE驱动的,因此您可以使用PCRE \K运算符来获取匹配中所需的值:

QRegularExpression regex("defining\\s+\\K[^;]+");
                                      ^^^

\K运算符会丢弃目前为止匹配的文本,因此在返回匹配项后,您只能获得与[^;]+匹配的文本。

请参阅another regex demo