qt正则表达式向后看

qt regular expression look behind

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

在下列情况下应该尝试寻找var

   defining var;
some text defining var;

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

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

some text defining      var;

现在它找到了除一个空格和变量之外的所有内容。

你可以匹配你想获取的值左边的上下文,将后者捕获到一个捕获组中:

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