QT-QRegExp和QRegularExpression

news/2025/3/21 1:30:42/

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)){      //匹配字符串listqDebug()<<s;      //过滤数字,只打印123、69}//检索str时QString str = "-123";qDebug()<<str.contains(regx);       //返回trueQRegExp 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 14index= 1 ,str= "1999" ,offset: 4 8index= 2 ,str= "12" ,offset: 9 11index= 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+$"));//是否为纯数字 例如12345678if(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.ppmy.cn/news/863297.html

相关文章

python_day7_map

绘制简易地图 导包 import jsonfrom pyecharts.charts import Map from pyecharts.options import *准备地图对象 map Map()准备数据 data [("新疆维吾尔自治区", 99),("黑龙江省", 199),("江苏省", 299),("辽宁省", 399),(&quo…

u盘在 计算机管理显示无媒体,urdrive_u盘显示无媒体怎么办_启动盘

urDrive 是金士顿 DataTraveler USB 闪存盘的内置软件&#xff0c;此款全新的软件让您能更有效率地寻找所需数据。 金士顿urDrive软件未来将会预装在一系列金士顿入门级DataTraveler系列U盘上&#xff0c;比如说101G2&#xff0c;108以及109等系列的USB闪存盘上都将预装这款管理…

详解FAT32文件系统

&#xfeff;&#xfeff; 硬盘是用来存储数据的&#xff0c;为了使用和管理方便&#xff0c;这些数据以文件的形式存储在硬盘上。任何操作系统都有自己的文件管理系统&#xff0c;不同的文件系统又有各自不同的逻辑组织方式。例如&#xff1a;常见的文件系统有FAT&#xff0c;…

【springboot中使用@RequestBody MultiValueMap 总是报400,415错误-关于流程引擎flowable】

springboot中使用RequestBody MultiValueMap 总是报400,415错误-关于流程引擎flowable 第一步&#xff1a;报错代码举例 在Spring boot 中使用 RequestBody 会报错&#xff0c;提示错误 Content type ‘application/x-www-form-urlencoded;charsetUTF-8’ not supported&…

axios ( ajax pro )

axios 什么是 axiosaxios 介绍axios 的使用axios 工具包下载axios 使用实例什么是 axios axios 介绍 根据我的理解就是对于原生ajax的一个封装,以达到方便使用异步刷新的目的。 ajax是什么呢?(Asynchronous JavaScript And XML,异步的JavaScript和XML) 首先要理解异步刷…

【无标题】打印水仙花(pyth)

i100 while i<1000: ai//100#计算百位 bint((i-a*100)/10)#计算十位 ci%10#计算个位 ta**3b**3c**3#用来判断是否为水仙花数 if ti: print(i) i1#继续进行循环

Python编程小练习——水仙花数

打印出所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c; 其各位数字立方和等于该数本身。 例如&#xff1a;153是一个"水仙花数"&#xff0c;因为1531的三次方&#xff0b;5的三次方&#xff0b;3的三次方。 for i in ran…

python水仙花数判断程序

水仙花数判断程序 水仙花数是一个三位整数&#xff0c;如153是一个水仙花数&#xff0c;是因为该数 的百位的立方、十位的立方、个位的立方之和等于该数本身&#xff0c;如下所 示&#xff1a; 1^3 5^3 3^3153 print("所有的三位数中的水仙花数如下图所示&#xff1a;&q…