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语句。
答案 0 :(得分:1)
是的,这是预期的行为。 CMake的正则表达式解析可能有点棘手,文档中的示例很简单。
在你的正则表达式中,你有<(.+)>
。这意味着搜索<
,然后搜索任何字符一次或多次,然后搜索>
。问题是.*
允许使用第一个>
,以及字符串中最后一个>
之前的所有后续字符。
为了获得您想要的行为,我认为指定除>
之外的任何字符都可以解决问题:
STRING(REGEX MATCH "#import <[^>]+>" input_directive "${shader_code}")