栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Qt5正则读取解析struct内容

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Qt5正则读取解析struct内容

代码
#include 
#include
#include
#include
//获得结构体名称
QString getStructName(const QString& strStruct)
{
    QRegularexpression findStructName(R"(structs+(?w+))");

    QRegularexpressionMatch  match =findStructName.match(strStruct);

    if(match.hasMatch()){
        QString name =match.captured("name");
        return name;
    }
    return "";
}
//获得成员变量,名称-类型
QMap getStructMember (const QString&strStruct)
{
    QMapname_type;
    QRegularexpression findStructItemLine (R"(s(?((w+)|(w+s+w+)))s+(?w+);)");

    QRegularexpressionMatchIterator i= findStructItemLine.globalMatch(strStruct,0);
    while(i.hasNext()){
        QRegularexpressionMatch  match=i. next();
        if(match.hasMatch()){
            QString type0 =match.captured("type0");
            QString name=match.captured("name");
            name_type[name]=type0;
        }
    }
    return name_type;
}



void getStruct(){

    QFile file("/home/sun/1.h");
    if(!file.open(QFile::ReadOnly)){
        return ;
    }
    QTextStream in(&file);
    QString content=in.readAll();
    QRegularexpression findStruct (R"(struct.*};)",QRegularexpression::DotMatchesEverythingOption | QRegularexpression::InvertedGreedinessOption);

    QRegularexpressionMatchIterator i= findStruct.globalMatch(content,0, QRegularexpression::PartialPreferCompleteMatch);
    while(i.hasNext()){
        QRegularexpressionMatch  match=i. next();
        if(match.hasMatch()){
            QString strStruct =match.captured(0);
            QString name= getStructName (strStruct);
            QMap name_type= getStructMember (strStruct);
        }
    }
}

int main(int argc, char*argv[])
{
    getStruct();
    QCoreApplication a (argc, argv);

}

测试文件
struct A
{
 int a;//da
 unsigned short b;
};

struct B
{
 	A a;
 	 unsigned short b;
};

总结

代码不是很通用,注释如果类似代码的情况可能不行,通用方法应该按编译原理来,就当学正则了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/780186.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号