QRegExp(正则表达式)

news2025/3/3 4:19:20

QRegExp

头文件:#include<QRegExp>

构造函数:

常用函数:

indexIn()判断是否符合规则
matchedLength()返回最后一个匹配字符串的长度,没有的话返回-1
setPattern()将模式字符串设置为模式。区分大小写、通配符和最小匹配选项不会更改
swap()交换正则表达式
replace()替换字符
setMinimal(bool)设置是否为贪婪   true为懒惰,flase为贪婪(默认)
setPatternSyntax(QRegExp::RegExp)设置正则语法模式
pattern()返回该正则表达式
exactMatch()返回字符串是否匹配,匹配返回true,不匹配返回false
cap()捕获(返回由第 n 个子表达式捕获的文本)第一个元素 cap(0) 是整个匹配字符串。每个后续元素对应于下一个捕获左括号。因此,cap(1) 是第一个捕获括号的文本,cap(2) 是第二个捕获括号的文本
captureCount()返回正则表达式中包含的捕获数。
captrueTexts()返回捕获的文本字符串的列表
setCaseSensitivity(Qt::CaseInsensitive)设置不区分大小写
pos()返回搜索字符串中捕获的第 n 个文本的位置
escape()返回转义后的字符字符串

 setPatternSyntax(QRegExp::RegExp)

QRegExp::RegExp默认
QRegExp::RegExp2和第一个一样但有贪婪的量词
QRegExp::Wildcard这提供了一个简单的模式匹配语法,类似于 shell
QRegExp::WildcardUnix这类似于通配符,但具有Unix shell的行为。通配符可以使用字符“\”进行转义。
QRegExp::FixedString模式是一个固定字符串。这相当于在字符串上使用 RegExp 模式,其中所有元字符都使用escape() 进行转义
QRegExp::W3CXmlSchema11该模式是由 W3C XML 架构 1.1 规范定义的正则表达式。

 c++使用 \d \w \s 这些需要使用转义字符 变为  \\d \\w \\s

QRegExp rx("^\\d\\d?$") //以两个数字为数字,第二个可以不用

函数的使用:

indexIn()函数的使用

indexIn(constQString&str,intoffset= 0,QRegExp::CaretModecaretMode= CaretAtZero) 

  • str 需要匹配的字符串
  • offset  偏移量默认为0, 0的话为第一个开始,-1从最后一个开始,-2倒数第二个开始
  • 返回的结果 -1 不匹配    匹配的话返回匹配的位置
    QRegExp exp("^\\d$|^[1-9][0-9]$|^100$");//匹配[0-100]
    qDebug()<<exp.indexIn("-1");//不匹配
    qDebug()<<exp.indexIn("0");
    qDebug()<<exp.indexIn("50");
    qDebug()<<exp.indexIn("100");
    qDebug()<<exp.indexIn("200");//不匹配

 

 setPattern()函数的使用

用来设置一个regexp

    QRegExp exp("^\\d$|^[1-9][0-9]$|^100$");//匹配[0-100]
    exp.setPattern("\\b12\\b");//输入一个regexp,匹配12
    qDebug()<<exp.indexIn("mmm mmm 12");//位置为8
    qDebug()<<exp.indexIn("mm 12");//位置为3
    qDebug()<<exp.indexIn("12");//位置为0
    qDebug()<<exp.indexIn(" 12");//位置为1

 

 replace()函数的使用:

用来替换所匹配的字符

    QRegExp exp("^\\d$|^[1-9][0-9]$|^100$");//匹配[0-100]
    exp.setPattern("M(?!ail)"); //匹配字符,M后面不能跟有ail
    QString str="abcdM";
    str.replace(exp,"Mail");//把匹配到的字符替换为Mail
    qDebug()<<str;

 

 

 统计匹配的个数

    exp.setPattern("\\bab\\b|\\bcd\\b");//匹配ab或cd
    QString str1="ab cd ef g ab cd";
    int pos=0;
    int count=0;
    while(pos>=0)
    {
        pos=exp.indexIn(str1,pos);获取匹配的索引
        if(pos>=0)
        {
            ++pos;//从匹配字符的下一个开始匹配
            ++count;//匹配成功,个数+1
        }
    }
    qDebug()<<count;//输出数量

 

 setPatternSyntax(QRegExp::RegExp)的使用

设置使用通配符

    exp.setPattern("*.txt");//匹配.txt结尾的
    exp.setPatternSyntax(QRegExp::Wildcard);//使用通配符
    qDebug()<<exp.exactMatch("p.txt");//true
    qDebug()<<exp.exactMatch("p.txt.p");//false

 

 cap()捕获的使用

cap(0)表示完全匹配,会返回整个匹配结果,cap(1) 是第一个捕获括号的文本,cap(2) 是第二个捕获括号的文本

cap(0)cap(1)cap(2) 的区别

  • 使用捕获的格式为:(E)
  • 使用非捕获格式为:(?:E) 非捕获效率比捕获高
    QRegExp exp2("(\\d+)(?:\\s*)(cm|inch)");
    int p2=exp2.indexIn("Length:198cm");
    if(p2>-1)
    {
        qDebug()<<exp2.cap(0);//输出全部匹配的内容
        qDebug()<<exp2.cap(1);//输出第一个匹配的内容
        qDebug()<<exp2.cap(2);//输出第二个匹配的内容
    }

 

 

遍历:

    QRegExp exp1("(\\d+)");
    QString s1="1 2 3 45 678 999";
    QString list;
    int p1=0;
    while((p1=exp1.indexIn(s1,p1))!=-1)//遍历整个字符串
    {
        list.append(exp1.cap(1));//第一个捕获到的文本
        p1+=exp1.matchedLength();//获取上一个匹配的字符串长度
    }
    qDebug()<<list;

 

 pos函数的使用:

    QRegExp exp3("(\\d)\\s(\\d{2})");
    qDebug()<<exp3.indexIn("as 1 2 34 56 er");//符合条件的位置
    qDebug()<<exp3.pos(0);//符合条件的位置
    qDebug()<<exp3.pos(1);//捕获1的位置
    qDebug()<<exp3.pos(2);//捕获2的位置

 

 escape()函数的使用

使用这函数方便了转义

    qDebug()<<QRegExp::escape("123");//无需转义
    qDebug()<<QRegExp::escape("()");//需转义
    qDebug()<<QRegExp::escape("[]");//需转义
    qDebug()<<QRegExp::escape("{}");//需转义
    qDebug()<<QRegExp::escape("f(x)");//需转义
    qDebug()<<QRegExp::escape("$");//需转义

 

 setMinimal(bool)贪婪的使用

系统默认是贪婪的

  •  setMinimal(true)设置为懒惰
    QRegExp exp4("(0+)");
    int ppp=exp4.indexIn("00000");
    if(ppp!=-1)
    {
        qDebug()<<exp4.cap(1);//输出结果为00000
    }
    exp4.setMinimal(true);//设为懒惰
    int ppp1=exp4.indexIn("00000");
    if(ppp1!=-1)
    {
        qDebug()<<exp4.cap(1);//输出结果为0
    }

 

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

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

相关文章

openpnp软件的使用 - 引入坐标文件

文章目录openpnp软件的使用 - 引入坐标文件前言笔记生成符合openpnp要求的坐标文件板子在openpnp设备上摆放的规则确定openpnp设备的x,y方向确定自己板子的原点坐标和xy方向在openpnp设备平台上摆放板子在openpnp中引入坐标文件新建任务新建板子引入板子的坐标文件设置mark点Pa…

Starday影响者视频能给你提升80%的流量?

跨境电商行业随着互联网时代的推进&#xff0c;Starday跨境电商平台受到越来越多的人关注&#xff0c;许多商家受碍于疫情影响&#xff0c;为了个人商家和企业发展&#xff0c;将目光投于海外。如雨后春笋般出现的跨境电商平台&#xff0c;也为商家带来了许多困扰&#xff0c;该…

JS高级(一):类、原生tab栏切换、原型和原型链

JavaScript高级&#xff08;一&#xff09;一、类&#xff08;之前ES6学过&#xff09;1.类的用法2.类的继承2.1 extends关键字2.2 super关键字&#xff08;1&#xff09;子类属性和父类一致&#xff0c;constructor可以省略&#xff08;2&#xff09;子类要添加属性&#xff0…

axios 实现 POST/PUT接口入参是 query的形式而非JSON的形式——querystring的使用

先看下什么是query的形式入参&#xff1a; 1.常规的GET请求 一般是GET请求才会是query string parameters的形式入参 参数是query string parameters的展示&#xff0c;最终效果是拼接到url地址中&#xff0c;如下图所示&#xff1a; 2.常规的POST/PUT请求 一般是POST/PUT请…

云小课|使用SQL加密函数实现数据列的加解密

摘要&#xff1a;数据加密作为有效防止未授权访问和防护数据泄露的技术&#xff0c;在各种信息系统中广泛使用。作为信息系统的核心&#xff0c;GaussDB(DWS)数仓也提供数据加密功能&#xff0c;包括透明加密和使用SQL函数加密。本文分享自华为云社区《看GaussDB(DWS)如何使用S…

电感单位亨利H单位换算

1H 1e-18EH 1e-15PH 1e-12TH 1e-9GH 1e-6MH 0.001kH 1H 1,000mH 1,000,000uH 1,000,000,000nH 1,000,000,000,000pH 1,000,000,000,000,000fH 在线H亨利单位换算 (toolxq.com)http://www.toolxq.com/front/tools/trans/unit/H 亨利是电感的国际单位制导出单位&#xff0c;符…

2022年《微信小程序从基础到uni-app项目实战》

教程推荐&#xff1a;黑马程序员前端微信小程序开发教程&#xff0c;微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)_ 一、起步 1 uni-app 简介 uni-app 是一个使用 Vue.js 开发所有前端应用的框架。开发者编写一套代码&#xff0c;可发布到 iOS、And…

Word不计算封面、目录页数将正文页码修改为第几页共几页的格式

本文介绍在Word文档中&#xff0c;不考虑封面、目录、前言等的页数&#xff0c;为正文添加“第X页&#xff0c;共X页”样式页码的方法。 在Word中&#xff0c;我们可以双击页眉或页脚部分&#xff0c;选择“页码”选项并添加页码。 其中&#xff0c;可以添加如下图所示形式的页…

Nginx配置虚拟主机

虚拟主机指的是,在一台服务器中,我们使用Nginx,来配置多个网站。 如何区分不同的网站: 端口不同域名不同 1、通过端口区分不同的虚拟主机 1.1、Nginx配置文件 &#xff08;1&#xff09;Nginx配置文件的位置 cd /usr/local/nginx/conf nginx.conf 就是Nginx的配置文件 &a…

Docker学习

Docker学习 Docker概述 Docker安装 Docker命令 Docker镜像 Docker的数据卷 DockerFile Docker网络原理 IDEA整合Docker 集群-Docker Compose Docker Swarm CI\CD jenkins Docker概述 安装教程&#xff1a;(https://docs.docker.com/engine/install/centos/) 文档…

CSS初阶语法

CSS初阶语法 文章目录CSS初阶语法1.CSS介绍2.CSS引入方式3.CSS基础选择器3.1 标签选择器(标签名字)3.2 类选择器(class)3.3 id选择器(id)3.4 通配符选择器(*)4.文字基本样式4.1 字体样式(font-size、font-weight、font-style、font-family、font)4.2 文本样式(text-indent、tex…

SpringBoot SpringBoot 开发实用篇 2 配置高级 2.1 第三方bean 属性绑定

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇2 配置高级2.1 第三方bean 属性绑定2.1.1 ConfigurationProperties2.…

ERP系统有哪些品牌?

企业资源规划 (ERP) 系统可以帮助企业在一个系统中管理其整个运营。凭借 CRM、人力资源、会计、供应链管理等功能&#xff0c;优秀的 ERP 系统可以集中并简化每位员工的日常工作。 那么&#xff0c;ERP系统有哪些品牌&#xff1f;哪个好用&#xff1f;下面就来简单介绍几个主流…

Android Studio App开发之网络通信中移动数据格式JSON的讲解以及实战(附源码 超详细必看)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、移动数据格式JSON 网络通信的交互数据格式有两大类&#xff0c;分别是JSON和XML&#xff0c;前者短小精悍&#xff0c;后者表现力丰富&#xff0c;对于App来说&#xff0c;基本采用JSON格式与服务器通信。一是手机流量…

计算机网络的常见面试题

GET 和 POST 的区别 作用 GET用来获取资源&#xff0c;POST用于传输实体主体 参数位置 GET的参数放在URL中&#xff0c;POST的参数存储在实体主体中&#xff0c;并且GET方法提交的请求的URL中的数据多是2048字节&#xff0c;POST请求没有大小限制 安全性 GET方法因为参数放在…

二极管:Irush与我相干!

故事还没结束,我们必须继续讲,继续挖,边说边究。 即使时间us级不会让FUSE同学Open,FUSE后面的兄弟姐妹呢,可以扛住事吗?那可有3.4A的能量冲击啊! 不确定,就有可能。墨菲老人家曾说过:会出错的事总会出错。也就是会发生的事总会发生,只要不给时间加上一个期限,非要给…

外卖项目03---分类管理业务开发

目录 一、公共字段自动填充 41 1.1问题分析 41 ​编辑1.2公共字段自动填充---代码实现并测试 42 1.3公共字段自动填充---功能完善 43 二、新增分类 44 2.1需求分析 44 三、分类信息查询 45 3.1需求分析 45 3.2代码开发 流程分析 四、删除分类 46 4.1需求分析 46 4.2…

教你打造高性能的 Go 缓存库

我在看一些优秀的开源库的时候看到一个有意思的缓存库 fastcache&#xff0c;在它的介绍主要有以下几点特点&#xff1a; 读写数据要快&#xff0c;即使在并发下&#xff1b;即使在数 GB 的缓存中&#xff0c;也要保持很好的性能&#xff0c;以及尽可能减少 GC 次数&#xff1…

基于Fluent求解器进行二次开发到底怎么做?

作者 | 小田老师 Ansys Fluent软件作为通用的流体仿真软件&#xff0c;功能模型虽然多而全&#xff0c;但是缺乏相应的行业专业性。同时仿真分析具有一定的技术门槛&#xff0c;既需要技术人员具备行业基础&#xff0c;也需要积累相关仿真经验&#xff0c;对软件操作要有较高的…

Docker安装Redis

文章目录1.Docker搜索Redis镜像2.Docker拉取镜像3.Docker挂载配置文件4.启动Redis 容器5.测试Redis6.Docker删除Redis1.Docker搜索Redis镜像 命令&#xff1a;docker search <镜像名称> docker search redis可以看到有很多redis的镜像&#xff0c;此处因没有指定版本&…