我正在尝试为 GLSL 着色器代码编写一个处理器,这将允许我分析代码并动态确定我需要为每个着色器处理哪些输入和输出。
为此,我决定在通过 OpenGL 编译之前使用一些正则表达式来解析着色器代码。
我编写了一些测试代码来验证正则表达式是否按预期工作。
代码:
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main()
{
string strInput = " in vec3 i_vPosition; ";
smatch match;
// Will appear in regex as:
// \bin\s+[a-zA-Z0-9]+\s+[a-zA-Z0-9_]+\s*(\[[0-9]+\])?\s*;
regex rgx("\\bin\\s+[a-zA-Z0-9]+\\s+[a-zA-Z0-9_]+\\s*(\\[[0-9]+\\])?\\s*;");
bool bMatchFound = regex_search(strInput, match, rgx);
cout << "Match found: " << bMatchFound << endl;
for (int i = 0; i < match.size(); ++i)
{
cout << "match " << i << " (" << match[i] << ") ";
cout << "at position " << match.position(i) << std::endl;
}
}
唯一的问题是上面的代码生成了两个结果而不是一个。虽然其中一个结果是空的。
输出:
Match found: 1
match 0 (in vec3 i_vPosition;) at position 6
match 1 () at position 34
当我提供整个文件作为输入时,我最终希望生成多个结果,但我想获得一些一致性,以便我可以以一致的方式处理结果。
关于我只期待一个结果时为什么会得到多个结果的任何想法?