马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本人自己再写处理.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[0] == '#') //以‘#’为注释符 若第一个字符为注释符 则直接读取下一行
{
continue;
}
else
{
//否则进行处理
int indexOfString = 0;
std::string param;
std::string value;
std::regex normalize("[0-9|\\s]*\0"); //整型数字正则表达式(包括空格)
while(string[indexOfString] != '=' || string[indexOfString] != ':') //这里的判断有问题 不过一个二重检测就搞定了 这里我也懒的改
{
//二重检测
if(string[indexOfString] == '=' || string[indexOfString] == ':')
{
break;
}
//默认去除所有空格
if(string[indexOfString] == ' ')
{
indexOfString++;
continue;
}
param += string[indexOfString++];
}
indexOfString++;
//当遇到'='或者':'时 先读取后面的所有内容
while(string[indexOfString] != '\0')
{
value += string[indexOfString++];
}
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[j] != '\0')
{
if(value[j] == ' ')
{
j++;
continue;
}
intValue.value += value[j]; //若不为空格 则追加到末尾
}
if(develop)
print(intValue);
add(intValue); //添加至链表
}
//若为假 则说明数据为字符串数据
else
{
//去除字符串两头的空格即可
int i = 0, j = value.length() - 2;
while(value[i] == ' ')
{
i++;
}
//若value末尾有空格 则替换为"\0"
while(value[j] == ' ')
{
value[j--] = '\0';
}
StringValue stringValue;
stringValue.param = param;
while(value[i] != '\0')
{
stringValue.value += value[i++];
}
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-9|\s]*" 为什么这个返回的是0
value: 1
希望有大佬可以帮助一下
|