【发布时间】:2015-11-26 23:00:31
【问题描述】:
我想从一个文件中提取多个 GLSL 源,并用标题分隔。我写了这个小正则表达式,为我做这个:
(?:\n|^)-- (\w*)\.?(\d\d\d)?\.(\w\w\w?)\r?\n([\s\S\r\n]*?)(?=\n--|$)
在这样的源上运行:
-- passthrough.VS
in vec4 position;
void main(){
gl_Position = position;
}
-- mvp.VS
layout (location=0) in vec3 position;
uniform mat4 model;
#include "engine/shaders/vp_include.glsl"
void main () {
gl_Position = proj * view * model * vec4 (position, 1.0);
}
捕获组([\s\S\r\n]*?) 应该与着色器的主体相匹配。由于Regex Working on regexr but not Visual Studio,我将\r\n 包括在内。
预期的输出(和要运行的代码)在这里:http://coliru.stacked-crooked.com/a/a890795f0c438a0b,用 gcc 编译(regex101.com 的引擎也给出了预期的输出)。
我的问题在于 Visual Studio 2015,其中最后一次捕获仅匹配一个空字符串(其他捕获工作)。
我错过了什么吗?这是 VS 正则表达式实现中的错误吗?
【问题讨论】:
-
你可能需要在 C 认为特别的东西上转义反斜杠。因此,将
\r\n放入 C 字符串的正则表达式将是x = "\\r\\n" -
@JerryJeremiah 原始字符串文字
R"(...)"允许您编写字符串而无需转义任何内容。
标签: c++ regex visual-studio visual-studio-2015