Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QRegexp空字节_Regex_Qt - Fatal编程技术网

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);}