我想從單個文件中提取多個GLSL源文件,並使用標題分隔。我寫這個正則表達式,爲我做到這一點:Visual C++正則表達式行爲vs gcc
(?:\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「(...)」'允許您編寫該字符串無需轉義任何東西。 – melak47