1

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

应尝试var在以下情况下查找:

   defining var;
some text defining var;

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

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

some text defining      var;

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

4

1 回答 1

1

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

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

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

请参阅此正则表达式演示

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

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

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

查看另一个正则表达式演示

于 2018-05-01T16:42:12.617 回答