1

命令的 CMake 文档string说:

REGEX MATCH 将匹配正则表达式一次并将匹配存储在输出变量中。

但是,当我按如下方式搜索模式时:

STRING(REGEX MATCH "#import <(.+)>" input_directive "${shader_code}")

其中“${shader_code}”是:

#import <../ColorCorrection.glsl>
#import <../YCbCrtoRGB.glsl>

uniform sampler2DRect srcFrame;
uniform vec2 sourceDimensions;

我得到的结果是:

#import <../ColorCorrection.glsl>
#import <../YCbCrtoRGB.glsl>

这不应该是这样。我应该只得到结果的第一行。看起来它多次搜索此模式并将其组合在一起。

这是预期的行为吗?有办法解决吗?基本上,我只想要代码中所有#import 语句中的第一个。

4

1 回答 1

1

是的,这是预期的行为。CMake 的正则表达式解析可能有点棘手,并且文档中的示例很简单。

在您的正则表达式中,您有<(.+)>. 这意味着搜索<,然后是任何字符一次或多次,然后是>。问题是.*允许使用第一个>字符,以及所有后续字符,直到>字符串中的最后一个字符。

为了获得您想要的行为,我认为指定任何字符都>可以解决问题:

STRING(REGEX MATCH "#import <[^>]+>" input_directive "${shader_code}")
于 2013-11-08T19:39:13.933 回答