使用MSVC 2013的正则表达式错误

时间:2016-04-18 06:37:59

标签: c++ regex visual-c++ std

我在MSVC 2013中使用std :: regex解析了一段类似xml的代码

private string errorMessage;

    public string ErrorMessage
    {
        get { return errorMessage; }
        set 
        { 
            errorMessage = value;
            NotifyPropertyChanged("ErrorMessage");
        }
    }

以下是模式:

<GLVertex>
#version 450 core
layout(location = 0) in vec3 pos;
in VertexInfo{
    vec2 uv;
}vertexInfo;
void main(){
    gl_Position = vec4(pos, 1.0);
    vertexInfo.uv = pos.xy;
}
<GLVertex/>
<GLFragment>
#version 450 core
layout(location = 0) uniform sampler2D g_map;
uniform Color {
    vec4 color;
};
layout(location = 0) out vec4 fragColor;
void main(){
    fragColor = texture(g_map, vertexInfo.uv);
}
<GLFragment/>

但程序总是崩溃!我的正则表达式中有没有错误?我在regex101上测试过。

PS。当我删除第5行时:

<GLVertex>((.|\n)+)<GLVertex\/>

它运作正常!

1 个答案:

答案 0 :(得分:1)

由于模式效率不高,您会收到Stack overflow (parameters: 0x00000001, 0x00312FFC)个异常。我认为这与std::regex如何处理重复的组(您已使用+ - 量词组(.|\n)+定义一个)有关。此模式匹配不是换行符(.)或换行符(\n)的每个字符,然后将匹配项存储在缓冲区中。然后,迭代器调试的问题仅在 Debug 模式中发生std::_Orphan_Me是发生中断的地方,在匹配字符串时它被认为是最“昂贵”的方法。见performance killer -Debug Iterator Support in Visual studio

您应该切换到 Release 模式,或者使用不需要使用重复组的正则表达式进行测试,例如任何非空字符 {{ 1}}使用延迟量词[^\x00]

*?

enter image description here