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)
).
请注意,QRegularExpression 是 PCRE 驱动的,因此您可以使用 PCRE \K
运算符来获取匹配本身所需的值:
QRegularExpression regex("defining\s+\K[^;]+");
^^^
\K
运算符会丢弃到目前为止匹配的文本,因此您只会在返回匹配后得到与[^;]+
匹配的文本。
我的正则表达式:(?<=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)
).
请注意,QRegularExpression 是 PCRE 驱动的,因此您可以使用 PCRE \K
运算符来获取匹配本身所需的值:
QRegularExpression regex("defining\s+\K[^;]+");
^^^
\K
运算符会丢弃到目前为止匹配的文本,因此您只会在返回匹配后得到与[^;]+
匹配的文本。