QT-QRegExp和QRegularExpression

news2024/12/27 12:00:41

1.QRegExp

qt5.0版本之前正则表示示类是QRegExp,通过它能够筛选出我们想要的数据,它的构造函数如下所示:

QRegExp::QRegExp(const QString &pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive, QRegExp::PatternSyntax syntax);

其中QRegExp::PatternSyntax syntax用于解释模式含义的语法,默认选择QRegExp::RegExp,主要参数如下所示:

1.1 QRegExp::RegExp参数

 

 

 元字符使用示例:

^\d{5,12}$               //  匹配数字(比如qq号),必须为5位到12位数字
 
"^-?\d+$"             //匹配整数,可以为负数
 
"^(-?\d+)(\.\d+)?$"    //匹配浮点数
"^\d+$"                //匹配非负整数
 
"^\d+(\.\d+)?$"        //匹配非负整数
 
"^[A-Za-z]+$"           //匹配大小写英文字母     

 2. 使用示例如下所示

    /*只能匹配整数,\\d表示转义字符,C++用\\来表示\ */
    QRegExp regx("^-?\\d+$");
    QValidator *validator = new QRegExpValidator(regx, this );
    ui->lineEdit->setValidator( validator );        //设置lineEdit只能输入数字
 
    QStringList list;
    list<<"123";
    list<<"123A456";
    list<<"555a";
    list<<"89d";
    list<<"3695x";
    list<<"69";
    list<<"78.9";
 
    foreach(QString s, list.filter(regx)){      //匹配字符串list
        qDebug()<<s;      //过滤数字,只打印123、69
    }
 
 
    //检索str时
    QString str = "-123";
    qDebug()<<str.contains(regx);       //返回true
 
    QRegExp regx2("-?\\d+");
    str = "number : -123xx";
    qDebug()<<str.indexOf(regx2);       //"-123"的位置在索引9上, QRegExp的缺点就是匹配到起始索引后,无法得到终点索引.

正则表达式讲解链接:正则表达式30分钟入门教程

 

 

QRegularExpressionMatch match(const QString &subject,        //被匹配的目标字符串
                             int offset = 0,               //匹配的字符串起始位置
                            MatchType matchType  = NormalMatch, //匹配类型
                           MatchOptions matchOptions = NoMatchOption) const;// 匹配选项

 

      QRegularExpression re("(\\d+)/(\\d+)/(\\d+)");
      QRegularExpressionMatch match = re.match("1999/12/11");
      if (match.hasMatch()) {
         for(int i = 0; !match.captured(i).isEmpty(); i++)
         {
            qDebug()<<"index="<<i<<",str="<<match.captured(i)<<",offset:"<<match.capturedStart(i)<<match.capturedEnd(i);
         }
      }

打印如下所示:

index= 0 ,str= "1999/12/11" ,offset: 4 14
 
index= 1 ,str= "1999" ,offset: 4 8
 
index= 2 ,str= "12" ,offset: 9 11
 
index= 3 ,str= "11" ,offset: 12 14

因为() 表示一个集合,所以除了匹配(\\d+)/(\\d+)/(\\d+)外,还会再次匹配3个圆括号里的内容,所以就有4个captured

4、输入QString类型数据,判定其类型

代码如下

                      
                 QString Qdata=dataOP[0][2];
                 bool isDigital=Qdata.contains(QRegExp("^\\d+$"));//是否为纯数字 例如12345678
                 if(isDigital)
                 {
                     DataType="int";
                     auto ddata=Qdata.toInt();
                    
                 }
                 else if(Qdata.contains(QRegExp("^(-?\\d+)(\\.\\d+)?$")))//是否为浮点型例如 1234.567
                 {
                     DataType="double";
                     auto ddata=Qdata.toDouble();
                    
                 }
                 else
                 {
                     if(Qdata.toLower()=="true"||Qdata.toLower()=="false")
                     {
                           DataType="bool";
                           bool ddata = true;
                           if(Qdata.toLower()=="false")
                           {
                                ddata = false;
                               
                           }
                     }
                     else//为QString类型
                     {
                           DataType="string";
                           auto ddata=Qdata.toStdString();
                           
                     }
                 }
             

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/748060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Leetcode】面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 一看不会&#xff0c;一看答案就懂 我们求出两个链表的长度&#xff0c;并求出两个…

【新版系统架构】第十九章-大数据架构设计理论与实践

大数据处理系统架构 大数据处理系统面临挑战 如何利用信息技术等手段处理非结构化和半结构化数据如何探索大数据复杂性、不确定性特征描述的刻画方法及大数据的系统建模数据异构性与决策异构性的关系对大数据知识发现与管理决策的影响 大数据处理系统架构特征 鲁棒性和容错…

分布式ELK 企业级日志分析系统

一、ELK的相关知识 1.ELK简介 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch&#xff1a;是基于Lucene&#xff08;一个全文检…

【JUC进阶】12. 环形缓冲区

目录 1、前言 2、基本概述 2.1、什么是环形缓冲区 2.2、结构刨析 2.3、优点 2.4、缺点 3、如何使用 3.1、定义一个环形缓冲区 3.2、Demo使用 1、前言 上一篇《【JUC进阶】11. BlockingQueue》中介绍到ArrayBlockingQueue&#xff0c;在物理上是一个数组&#xff0c;但…

安科瑞智能母线监控在数据中心的应用

引言&#xff1a; 近年来&#xff0c;随着母线槽在建筑及工厂的配电中越来越广泛&#xff0c;母线槽场景运用的越多&#xff0c;随着数据中心建设的快速发展和更高需求&#xff0c;智能母线系统逐渐被应用于机房的末端配电中&#xff0c;具有电流小、插接方便、智能化程度高等…

一百二十八、Kettle——从Hive增量导入到ClickHouse

一、目标 用Kettle把Hive的DWS层数据增量导入到ClickHouse中 工具版本&#xff1a;Kettle&#xff1a;8.2 Hive:3.1.2 ClickHouse21.9.5.16 全量导入请访问拙作链接 http://t.csdn.cn/Rqvuvhttp://t.csdn.cn/Rqvuv 二、前提准备 &#xff08;一&#xff09;kettl…

如何在 .NET Core 中使用 Azure Key Vaul

Azure Key Vault是一个安全可靠的存储库&#xff0c;用于存储在.NET Core应用程序中使用的令牌、密钥、密码、证书和其他敏感数据。接下来我们讲讲如何在C#中使用它。 在构建.NET Core应用程序时&#xff0c;我们经常使用各种“秘密”&#xff0c;如客户端ID、访问令牌、密码、…

我的第一个java项目

安装了idea软件且本地通过cmd 命令启动了mysql。还安装了java sdk。 总结spring-boot通过resource下的mapping文件下的文件xml语法来增删查改(因为使用了MyBatis&#xff0c;MyBatis 的真正强大在于它的语句映射&#xff0c;这是它的魔力所在。由于它的异常强大&#xff0c;映…

7.12 模型显存/mix-precision

一、完全参考&#xff1a;模型的显存和参数量计算 显存占用模型显存(参数)batch_size每个样本显存(输出和梯度动量) 首先是“运算量”和“参数量”两个概念&#xff1a;参数量&#xff1a;这个比较好理解&#xff0c;例如卷积层中的卷积核c_i*k*k*n_o&#xff0c;其参数量就是相…

CAN转EtherNet/IP网关ethernet/ip协议

JM-EIP-CAN 是自主研发的一款 ETHERNET/IP 从站功能的通讯网关。该产品主要功能是将各种 CAN 总线和 ETHERNET/IP 网络连接起来。 本网关连接到 ETHERNET/IP 总线中做为从站使用&#xff0c;连接到 CAN 总线中根据节点号进行读写。 技术参数 ETHERNET/IP 技术参数 网关做为 E…

【计算机网络】第三章 数据链路层(集线器与交换机)

文章目录 第三章 数据链路层3.8 集线器与交换机总结 第三章 数据链路层 3.8 集线器与交换机 使用 集线器HUB 的以太网在逻辑上仍是一个总线网&#xff0c;各站共享总线资源&#xff0c;使用的还是 CSMA/CD 协议&#xff08;半双工&#xff09;。集线器 只工作在物理层&#xff…

UG\NX二次开发 返回视图中的可见对象UF_VIEW_ask_visible_objects

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 返回视图中的可见对象UF_VIEW_ask_visible_objects 效果: 代码: #include "me.hpp" using namespace std; //获取view视图的可见对象 //view = NULL_TAG 当前视图 vector<tag_t>…

Python endswith()函数使用详解

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 endswith函数使用详解 1、指定范围2、str可以传入元组3、空字符串为真4、大小写敏…

STM32L+BC20+MQTT协议传输温湿度,GPS数据到阿里云物联网平台

&#xff08;阿里云&#xff09;STM32LBC20MQTT协议传输温湿度&#xff0c;GPS数据到阿里云物联网 1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板…

飞控仿真软件

飞控仿真是一种在计算机模拟环境中对飞行控制系统进行测试和验证的方法。它通过使用仿真软件和工具来模拟飞行器的物理行为、传感器数据和控制算法的执行&#xff0c;以评估飞行控制系统的性能和稳定性。 原理 物理模型&#xff1a;仿真软件使用物理模型来描述飞行器的运动行为…

成为一名网络安全工程师难吗?

如果对该专业感兴趣且愿意为之努力&#xff0c;那么学起来是十分轻松的&#xff1b;如果不感兴趣且不愿下功夫&#xff0c;学习起来肯定比较难的 需要学什么&#xff1f; 成为网络安全工程师&#xff0c;需要经历3各阶段&#xff1a;初级安全工程师→中级安全工程师→高级安全…

【Linux后端服务器开发】socket套接字

目录 一、socket 套接字概述 二、socket 函数接口 三、IP地址与端口号的网络格式 四、TCP协议的本地通信C语言示例 一、socket 套接字概述 socket 是什么&#xff1f; socket 本质上是一个抽象的概念&#xff0c;它是一组用于网络通信的 API&#xff0c;提供了一种统一的…

宝塔部署前后端分离项目

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 项目部署 ✨特色专栏&…

【数据结构导论】第 5 章:图

目录 一、图的基本概念 &#xff08;1&#xff09;图的定义 &#xff08;2&#xff09;图的基本术语 &#xff08;3&#xff09;图的基本运算 二、图的存储结构 &#xff08;1&#xff09;邻接矩阵 ① 图的邻接矩阵 ② 带权图(网)的邻接矩阵 ③ 邻接矩阵的类型定…

【UE4】在控件蓝图上播放视频

UE版本&#xff1a;4.26 在上一篇文章中&#xff08;【UE】场景内播放视频、音频&#xff09;介绍了如何在场景中播放视频&#xff0c;本篇文章将介绍如何在UI上播放视频 效果 步骤 1. 首先在“Content”文件夹中新建一个名为“Movies”的文件夹 2. 在文件夹中随便添加一个.…