C++ 正则表达式问题
本人自己再写处理.ini文件的类时,需要使用到正则表达式 可是C++的正则表达式比较函数regex_match给我的结果与我想的完全不一样这下面是我类的主要代码
void readFile()
{
file.open(filename, std::ios::in);
while(!file.eof())//当不是在文件末尾时 继续读取
{
std::string string;
std::getline(file, string);
if(develop)
std::cout << string << std::endl;
string += '\0'; //末尾标识符
if(string == '#') //以‘#’为注释符 若第一个字符为注释符 则直接读取下一行
{
continue;
}
else
{
//否则进行处理
int indexOfString = 0;
std::string param;
std::string value;
std::regex normalize("*\0"); //整型数字正则表达式(包括空格)
while(string != '=' || string != ':') //这里的判断有问题 不过一个二重检测就搞定了 这里我也懒的改
{
//二重检测
if(string == '=' || string == ':')
{
break;
}
//默认去除所有空格
if(string == '')
{
indexOfString++;
continue;
}
param += string;
}
indexOfString++;
//当遇到'='或者':'时 先读取后面的所有内容
while(string != '\0')
{
value += string;
}
value += '\0';//末尾标识符
if(develop)
{
std::cout << "\""<<value << "\":" << std::regex_match(value, normalize) << std::endl;
}
//若为真 则说明数据为整型数据
if(std::regex_match(value, normalize)) /////////////////// 这里有问题
{
IntValue intValue;
intValue.param = param;
int j = 0;//去空格用
while(value != '\0')
{
if(value == '')
{
j++;
continue;
}
intValue.value += value; //若不为空格 则追加到末尾
}
if(develop)
print(intValue);
add(intValue);//添加至链表
}
//若为假 则说明数据为字符串数据
else
{
//去除字符串两头的空格即可
int i = 0, j = value.length() - 2;
while(value == ' ')
{
i++;
}
//若value末尾有空格 则替换为"\0"
while(value == ' ')
{
value = '\0';
}
StringValue stringValue;
stringValue.param = param;
while(value != '\0')
{
stringValue.value += value;
}
if(develop)
print(stringValue);
add(stringValue); //添加至链表
}
}
}然后这里是我测试用的.ini文件的内容
# 这是我的注释测试
path = C:\Users\Administrator.PC-20191006TRUC\source\repos\OpenGL\.vscode\OpenGL\OpenGLTool\OpenGLFile
value = 1然后主要问题就是当我代码中的 value 变量的值为 " 1"(“1”的前面是一个空格)的时候 正则表达式的比较函数仍然返回0 这是我搞不懂的
这下面是我测试时的输出内容
# 杩欐槸鎴戠殑娴嬭瘯 //这个单纯编码问题 不用管
path = C:\Users\Administrator.PC-20191006TRUC\source\repos\OpenGL\.vscode\OpenGL\OpenGLTool\OpenGLFile//这个也不用管
" C:\Users\Administrator.PC-20191006TRUC\source\repos\OpenGL\.vscode\OpenGL\OpenGLTool\OpenGLFile":0
path: C:\Users\Administrator.PC-20191006TRUC\source\repos\OpenGL\.vscode\OpenGL\OpenGLTool\OpenGLFile
value = 1 //这个也不用管
" 1":0 //主要是这个 这个字符串理论上应当符合我的正则表达式"*"为什么这个返回的是0
value: 1希望有大佬可以帮助一下
本帖最后由 jhq999 于 2022-4-8 15:59 编辑
学习 " 1":0 //主要是这个 这个字符串理论上应当符合我的正则表达式"*"为什么这个返回的是0
有两个双引号和一个冒号,所以不能完全匹配
页:
[1]