CMake Regex Glomming匹配在一起

时间:2013-11-08 16:10:14

标签: regex cmake

string命令的CMake文档说:

  

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语句。

1 个答案:

答案 0 :(得分:1)

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

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

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

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