Qt QRegexp空字节
我试图使用正则表达式从字符串中提取一个片段。问题是读取文件包含一个空字节,这会弄乱我试图执行的正则表达式。二进制数据如下所示:Qt QRegexp空字节,regex,qt,Regex,Qt,我试图使用正则表达式从字符串中提取一个片段。问题是读取文件包含一个空字节,这会弄乱我试图执行的正则表达式。二进制数据如下所示: 75736572 2c 7265766973696f6e 00 737472 2c 736f6d65 QString Config::readInstanceValue(QString filepath, QRegExp regex, int group) { QString instance_value = HGGW_NOT_SET_KEYWORD;
75736572 2c 7265766973696f6e 00 737472 2c 736f6d65
QString Config::readInstanceValue(QString filepath, QRegExp regex, int group)
{
QString instance_value = HGGW_NOT_SET_KEYWORD;
QFile instance_file(filepath);
if(instance_file.open(QFile::ReadOnly | QFile::Text))
{
QTextStream in(&instance_file);
while(!in.atEnd())
{
QString file_line = in.readLine();
qDebug() << "READ CONFIG "<< file_line;
if(regex.indexIn(file_line) != -1 && group <= regex.captureCount())
{
instance_value = regex.cap(group);
break;
}
}
}
instance_file.close();
return instance_value;
}
字符串:
user,revision{HERE NULLBYTE}str,some
我只想提取“revision”字符串。我尝试过的正则表达式:
^[^,]*,([^\\d\\w_-]*),[^,]*$ = No match
^[^,]*,([^,]*)\x0000[^,]*,[^,]*$ = revision{HERE NULLBYTE}str
^[^,]*,([^,]*)\h000[^,]*,[^,]*$ = revision{HERE NULLBYTE}str
这些都不管用。是的,我需要用正则表达式来做这个。我唯一能做的就是对结果字符串进行一些post操作
方法如下所示:
75736572 2c 7265766973696f6e 00 737472 2c 736f6d65
QString Config::readInstanceValue(QString filepath, QRegExp regex, int group)
{
QString instance_value = HGGW_NOT_SET_KEYWORD;
QFile instance_file(filepath);
if(instance_file.open(QFile::ReadOnly | QFile::Text))
{
QTextStream in(&instance_file);
while(!in.atEnd())
{
QString file_line = in.readLine();
qDebug() << "READ CONFIG "<< file_line;
if(regex.indexIn(file_line) != -1 && group <= regex.captureCount())
{
instance_value = regex.cap(group);
break;
}
}
}
instance_file.close();
return instance_value;
}
QString配置::readInstanceValue(QString文件路径,QRegExp regex,int组)
{
QString实例\值=HGGW\未\设置\关键字;
QFile实例_文件(filepath);
if(实例_file.open(QFile::ReadOnly | QFile::Text))
{
QTextStream(实例文件(&U);
而(!in.atEnd())
{
QString file_line=in.readLine();
qDebug()我建议使用
QRegExp regex = "([^,\\s]+)\\x0000";
它匹配并捕获除逗号和空格以外的任何1+字符到组1中,然后要求显示空字符(这是左侧上下文)
然后,您需要将regex
传递给Config::readInstanceValue
方法,并将group
参数设置为1
如果不需要动态返回特定的组值,请使用
if(regex.indexIn(file_line) != -1)
{
instance_value = regex.cap(1);
break;
}
如果你能用空字节读入字符串,你可以用QRegularExpression来尝试\\S+(?=\\x{0000})
。你的意思是用QRegularExpression来代替\x0000部分吗?不,对不起,这里有一个逗号,试试[^,\\S]+(?=\\x{0000})
作为一个完整的正则表达式。我想[^,\\S]+(?=\\x00)
也会用同样的方法。仍然没有匹配的方法\\x0000
然后如果(regex.indexIn(文件行)!=-1){instance\u value=regex.cap(1);}