qt 正则表达式简单介绍
正则表达式即一个文本匹配字符串的一种模式,Qt中使用QRegExp类进行模式匹配.主要应用:字符串验证,搜索,替换,分割.....
正则表达式中字符及字符集
c | 匹配字符本身,如a匹配a |
\c | 跟在\后面的字符匹配字符本身,但本表中下面指定的这些字符除外。 |
\a | 匹配ASCII的振铃 |
\f | 匹配ASCII的换页 |
\n | 匹配ASCII的换行 |
\r | 匹配ASCII的回车 |
\t | 匹配ASCII的水平制表符 |
\v | 匹配ASCII的垂直制表符 |
\xhhhh | 匹配Unicode字符对应的十六进制数 |
\0ooo | 匹配八进制的ASCII/Latin1字符 |
. | 匹配任意字符 |
\d | 匹配任意一个数字 |
\D | 匹配一个非数字 |
\s | 匹配一个空白字符,包括“\t”、“\n”、“\v”、“\f”、“\r”及“” |
\S | 匹配一个非空白字符 |
\w | 匹配一个单词字符,包括任意字符数字下划线,即A~Z,a~z,0~9中任意一个 |
\W | 匹配一个非单词字符 |
\n | 第n个反向引用 |
正则表达式中的量词
E? | 匹配0次或1次等价于E{0,1} |
E+ | 匹配1次或多次,等价于E{1,} |
E* | 匹配0次或多次,等价于E{0,} |
E{n} | 匹配n次 |
E{n,} | 匹配至少n次 |
E{,m} | 匹配至多m次 |
E{n,m} | 匹配至少n次,至多m次 |
正则表达式中的断言
^ | 标志字符串的开始。若匹配“^”则使用“\\^” |
$ | 标志字符串的结尾。若匹配“$”则使用“\\$” |
\b | 一个单词的边界 |
\B | 一个非单词的边界。当\b为false则它为true |
以上是在正则表达式中字符的使用解释,这不必要求能记下来,知道正确使用,在用到的时候能查阅使用就可以了.
一.QRegExp
1.
exactMatch()精准匹配字符,匹配的字符完全相同时返回true,否则返回false.
QRegExp reg("a"); qDebug()<<"匹配字符本身:"<<reg.exactMatch("abc") //false<<reg.exactMatch("a")<<endl; //true
2.
exactMatch()精准匹配字符,数字.
通过上面的表格,我们可知: \d表示匹配任意一个数字,我们需要再加一个\进行转义.*表示匹配0次或多次.\D表示匹配一个非数字,{2}表示匹配2次.
QRegExp reg0("(\\d*\\D{2})");//()仅仅作为字符串组合.D{2}匹配2个字符.\\d*匹配任意个数字qDebug()<<"匹配数字:"<<reg0.exactMatch("183cm") //true<<reg0.exactMatch("183m") //false<<reg0.exactMatch("72in"); //true
3.
匹配通配符.
*表示匹配0次或多次.使用setPatternSyntax()设置匹配语法,正则表达式支持通配符.它的参数有好几个枚举值,其中QRegExp::wildcard 正则表达式支持通配符;QRegExp::RegExp 正则表达式支持默认语法.
QRegExp rx("*.txt");//设置匹配语法rx.setPatternSyntax(QRegExp::Wildcard);//正则表达式支持通配符//rx.setPatternSyntax(QRegExp::RegExp);//正则表达式支持默认语法qDebug()<<"通配符匹配:"<<rx.exactMatch("License.txt") // true exactMatch准确匹配<<rx.exactMatch("License.txt.bak")<<endl; //false
4.
断言,匹配单词边界.
\b表示一个单词的边界. \\b(hello|Hello)\\b 表示单词hello|Hello前后都有一个其他的字符,这是单词的边界.使用indexIn()函数匹配字符,可以返回匹配到的字符的位置,-1表示匹配失败.返回的正整数表示匹配到的字符具体位置.
QRegExp reg1;//设置匹配模式// \b代表一个单词的边界, \\b(hello|Hello)\\b 表示单词前后都有一个其他的字符reg1.setPattern("\\b(hello|Hello)\\b");qDebug()<<"匹配多个单词:"<<reg1.indexIn("helloEveryone") //-1表失败<<reg1.indexIn("Hmm hello everyone!") //匹配到的字符位置4<<reg1.indexIn("Hi girls! hello boys!") //匹配到的字符位置10<<endl;
5.
捕获匹配的文本.cap()函数捕获的文本不会捕获到空格.cap(0)捕获全部匹配的文本.cap(1)捕获匹配到的第一个文本.cap(2)捕获匹配到的第二个文本.下面代码,正因为cap()不会捕获到空格,所以匹配到的文本226 cm中,cap(1)捕获到226;cap(2)捕获到的是cm而不是空格.
\d表示匹配任意一个数字.+表示匹配1次或多次.
(?:表示开始.
\s表示匹配一个空白字符,包括制表符“\t”、换行符“\n”、垂直制表符“\v”、换页符“\f”、回车符“\r”及“”.
*表示匹配0次或多次.
)表示结束.
QRegExp regHeight("(\\d+)(?:\\s*)(cm|inch)");//英尺//匹配文本int res = regHeight.indexIn(" YaoMing 226 cm");//文本匹配if(res>-1){qDebug()<<"文本捕获:"<<"cap(0):"<<regHeight.cap(0) //捕获全部匹配文本 226cm<<"cap(1):"<<regHeight.cap(1) //捕获第一个 226<<"cap(2):"<<regHeight.cap(2);//捕获第二个 cm
6.
断言 ?!不紧跟才匹配.replace()替换字符.indexIn()找出匹配的字符位置.
QRegExp reg2;//QRegExp reg2("面(?!包)");//可在定义时直接设置 reg2("面(?!包)"),也可通过setPattern()设置//设置匹配模式.reg2.setPattern("面(?!包)");//"面"后不紧跟"包"才匹配,即面和包不能在一起QString str = "面没了,吃面包也好,吃面食物也可以.";qDebug()<<str<<endl; //替换前:面没了,吃面包也好,吃面食物也可以.str.replace(reg2,"意大利"); //用"意大利"替换"面"qDebug()<<str<<endl; //替换后:意大利没了,吃面包也好,吃意大利食物也可以.qDebug()<<reg2.indexIn("你好,面还没好,你吃面包吗?")<<endl;//匹配到的位置是3
二.QRegularExpression
在Qt 5中引入了新的正则表达式类QRegularExpression.
1.
match()部分匹配,并返回匹配到的字符位置.匹配到的字符起始位置:0-5,字符为"hello"
QRegularExpression regExp("hello");//部分匹配,匹配一段字符结果 match().匹配到的字符起始位置:0-5,字符为"hello"qDebug()<<"QRegularExpression 匹配字符:"<<regExp.match("hello world!");
2.大小写不敏感匹配.
\w表示匹配一个单词字符,包括任意字符数字下划线,即A~Z,a~z,0~9中任意一个.{3,8}表示最少匹配3次,最多匹配8次.A-Z表示可匹配范围大写字母A到Z.
setPatternOption()匹配模式选项,它有非常多的匹配模式枚举值,其中常用的有:
QRegularExpression::CaseInsensitiveOption表示大小写不敏感匹配;
QRegularExpression::NoPatternOption表示不设置匹配模式,就是默认匹配模式.
QRegularExpression::DotMatchesEverythingOption表示正则表达式中的.
可以匹配任何字符,包括换行符。如果不使用该选项,则.
只能匹配除了换行符以外的任何字符.
QRegularExpression::MultilineOption用于指定正则表达式是否跨行匹配。如果启用了此选项,则^和$元字符将匹配每行的开头和结尾,而不是整个字符串的开头和结尾.
......
//regExp.setPattern("[\\w]{3,8}"); //设置匹配模式.匹配3到8个字符regExp.setPattern("[A-Z]{3,8}"); //设置匹配模式regExp.setPatternOptions(QRegularExpression::CaseInsensitiveOption);//设置模式选项.大小写不敏感(不区分大小写)qDebug()<<"大小写不敏感匹配:"<<regExp.match("hello");
3.captured()捕获文本.
captured(0)完整捕获整个文本;captured(1)捕获第一个文本;以此类推.hasMatch()精准匹配.如果匹配成功则返回true.
QRegularExpression reDate("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$");//日/月/年QRegularExpressionMatch match0 = reDate.match("01/10/1949");//匹配类if(match0.hasMatch()){//hasMatch()如果成功返回trueQString strMatch = match0.captured(0); //完整匹配,捕获整个文本QString day = match0.captured(1); //捕捉到第一个文本日QString month = match0.captured(2); //捕捉到第二个文本到月QString year = match0.captured(3); //捕捉到第三个文本到年qDebug()<<"捕获文本:"<<"strMatch:"<<strMatch<<endl<<"day:"<<day<<endl<<"month:"<<month<<endl<<"year:"<<year<<endl;}
4.部分匹配match().^表示字符串匹配开始,$表示字符串匹配结束.
hasMatch()精准匹配.hasPartialMatch()部分匹配.
//部分匹配QString sPattern;sPattern = "^(Jan|Feb|Mar|Apr|May) \\d\\d \\d\\d\\d\\d$";//月 日 年QRegularExpression reDate1(sPattern);//初始化指定表达式QString ss("Apr 01");//不完整QRegularExpressionMatch match1;//用于接收匹配结果//reDate1.match().调用match()方法,返回的是QRegularExpressionMatch类型,所以用该类型接收match1 = reDate1.match(ss, //需匹配的字符0, //匹配开始的位置QRegularExpression::PartialPreferCompleteMatch//匹配模式:部分匹配);bool bHasMatch = match1.hasMatch(); //精准匹配bool bPartial = match1.hasPartialMatch(); //部分匹配qDebug()<<bHasMatch //false<<bPartial; // true
关于Qt正则表达式的分享就到这里了,all~~
相关文章:
qt 正则表达式简单介绍
正则表达式即一个文本匹配字符串的一种模式,Qt中使用QRegExp类进行模式匹配.主要应用:字符串验证,搜索,替换,分割..... 正则表达式中字符及字符集 c 匹配字符本身,如a匹配a \c 跟在\后面的字符匹配字符本身,但本表中下面指定的这些字符除外。 \a 匹…...
Redis设计与实现之跳跃表
目录 一、跳跃表 1、跳跃表的实现 2、跳跃表的应用 3、跳跃表的时间复杂度是什么? 二、跳跃表有哪些应用场景? 三、跳跃表和其他数据结构(如数组、链表等)相比有什么优点和缺点? 四、Redis的跳跃表支持并发操作吗…...
[每周一更]-(第27期):HTTP压测工具之wrk
[补充完善往期内容] wrk是一款简单的HTTP压测工具,托管在Github上,https://github.com/wg/wrkwrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事…...
【FunASR】Paraformer语音识别-中文-通用-16k-离线-large-onnx
模型亮点 模型文件: damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorchParaformer-large长音频模型集成VAD、ASR、标点与时间戳功能,可直接对时长为数小时音频进行识别,并输出带标点文字与时间戳: ASR模型…...
C语言中的柔性数组
uint8_t data[0];代码的含义老虎开始对这个数组不太了解,查阅后得知这是个柔性数组。 C语言中的柔性数组(Flexible Array Member)是一种特殊的数组,它被定义在结构体的最后一个元素中,其大小未知,也就是所…...
ca-certificates.crt解析加载到nssdb中
openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt | openssl pkcs7 -print_certs -noout -text ca-certificates.crt为操作系统根证书列表。 获取证书以后使用PK11_ImportDERCert将证书导入到nssdb中 base::FilePath cert_path base::FilePath("…...
聊聊Java中的常用类String
String、StringBuffer、StringBuilder 的区别 从可变性分析 String不可变。StringBuffer、StringBuilder都继承自AbstractStringBuilder ,两者的底层的数组value并没有使用private和final修饰,所以是可变的。 AbstractStringBuilder 源码如下所示 ab…...
R语言piecewiseSEM结构方程模型在生态环境领域实践技术
结构方程模型(Sructural Equation Modeling,SEM)可分析系统内变量间的相互关系,并通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性,是近年来生态、进化、环境、地学、…...
IDEA设置查看JDK源码
问题 我们在查看JDK源码时,可能会遇到这种情况,步入底层查看JDK源码时,出现一堆var变量,可读性非常之差,例如笔者最近想看到nio包下的SocketChannelImpl的write方法,结果看到这样一番景象: pu…...
SSM—Mybatis
目录 和其它持久化层技术对比 搭建MyBatis 开发环境 创建maven工程 创建MyBatis的核心配置文件 创建mapper接口 创建MyBatis的映射文件 通过junit测试功能 加入log4j日志功能 核心配置文件详解 MyBatis的增删改查 新增 删除 修改 查询一个实体类对象 查询list集…...
MYSQL在不删除数据的情况下,重置主键自增id
MYSQL在不删除数据的情况下,重置主键自增id 方法一: SET num : 0; UPDATE table_name SET id num : (num1); ALTER TABLE table_name AUTO_INCREMENT 1; 方法二: 背景(mysql 数据在进行多次删除新增之后id变得很大,但是并没…...
SpringMVC-servlet交互
servlet交互 1.1 引入servlet依赖 <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency>1.2 创建testservl…...
DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点
DICOM 文件的结构,在网上有很多的学习资料,这里只介绍些容易混淆的概念,作为回看笔记。 1. 传输语法 每个传输语法,起都是表达的三个概念:大小端、显隐式、压缩算法 DICOM Implicit VR Little Endian: 1.2.840.1000…...
git 的使用
git reset详解-CSDN博客 git reset 命令详解 git revert命令详解。-CSDN博客 关于Git分支中HEAD和Master的理解 - 知乎 (zhihu.com) 一文带你精通 Git(Git 安装与使用、Git 命令精讲、项目的推送与克隆)-CSDN博客 Git 常用操作(5ÿ…...
详解—【C++】lambda表达式
目录 前言 一、lambda表达式 二、lambda表达式语法 2.1. lambda表达式各部分说明 2.2. 捕获列表说明 三、函数对象与lambda表达式 前言 在C98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。 #include <algorithm> #i…...
Qt Desktop Widgets 控件绘图原理逐步分析拆解
Qt 是目前C语言首选的框架库。之所以称为框架库而不单单是GUI库,是因为Qt提供了远远超过GUI的功能封装,即使不使用GUI的后台服务,也可以用Qt大大提高跨平台的能力。 仅就界面来说,Qt 保持各个平台绘图等效果的统一,并…...
什么是rocketmq❓
在大规模分布式系统中,各个服务之间的通信是至关重要的,而RocketMQ作为一款分布式消息中间件,为解决这一问题提供了强大的解决方案。本文将深入探讨RocketMQ的基本概念、用途,以及在实际分布式系统中的作用,并对Produc…...
【网络安全】HTTP Slowloris攻击原理解析
文章目录 Slowloris攻击的概念Slowloris攻击原理Slowloris攻击的步骤其他的DDoS攻击类型UDP FloodICMP (Ping) FloodSYN FloodPing of DeathNTP AmplificationHTTP FloodZero-day DDoS 攻击 推荐阅读 Slowloris攻击的概念 Slowloris是在2009年由著名Web安全专家RSnake提出的一…...
从最近爆火的ChatGPT,我看到了电商的下一个形态
爆火的ChatGPT似乎让每个行业有了改造的可能性,电商行业也不例外。 在讨论了很多流量红利消失的话题后,我们看到互联网电商行业不再性感,从淘宝天猫,京东,到拼多多,再到抖音,快手,电…...
云原生向量计算引擎 PieCloudVector:为大模型提供独特记忆
拓数派大模型数据计算系统(PieDataComputingSystem,缩写:πDataCS)在10月24日程序员节「大模型数据计算系统」2023拓数派年度技术论坛正式发布。πDataCS 以云原生技术重构数据存储和计算,「一份存储,多引擎…...
大创项目推荐 深度学习 opencv python 实现中国交通标志识别
文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 🔥 优质…...
深度学习实战67-基于Stable-diffusion的图像生成应用模型的搭建,在Kaggle平台的搭建部署,解决本地没有算力资源问题
大家好,我是微学AI,今天给大家介绍一下深度学习实战67-基于Stable-diffusion的图像生成应用模型的搭建,在Kaggle平台的搭建部署,解决本地没有算力资源问题。稳定扩散模型(Stable Diffusion Model)是一种用于图像增强和去噪的计算机视觉算法。它通过对输入图像进行扩散过程…...
云原生之深入解析Kubernetes本地持久化存储方案OpenEBS LocalPV的最佳实践
一、K8s 本地存储 K8s 支持多达 20 种类型的持久化存储,如常见的 CephFS 、Glusterfs 等,不过这些大都是分布式存储,随着社区的发展,越来越多的用户期望将 K8s 集群中工作节点上挂载的数据盘利用起来,于是就有了 loca…...
设计模式-策略(Strategy)模式
又被称为政策(方针)模式策略模式(Strategy Design Pattern):封装可以互换的行为,并使用委托来决定要使用哪一个策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中&#x…...
Star 4.1k!Gitee GVP开源项目!新一代桌面应用开发框架 ElectronEgg!
前言 随着现代技术的快速升级迭代及发展,桌面应用开发已经变得越来越普及。然而对于非专业桌面应用开发工程师在面对这项任务时,可能会感到无从下手,甚至觉得这是一项困难的挑战。 本篇文章将分享一种新型桌面应用开发框架 ElectronEgg&…...
node.js学习(简单聊天室)
在掘金查看该文章 1. TCP服务搭建 1.1 socket 先来粗略了解下socket 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中&am…...
cfa一级考生复习经验分享系列(四)
备考CFA一级满打满算用了一个多月,每天八个小时以上。可能如果仅以通过为目标的话完全不用这样,看过太多类似于只看了一周就通过了考试又或是放弃了好几门飘过了考试的情况,我觉得这是不正确的考试状态,完全不必惊叹,踏…...
PPT插件-好用的插件-放映笔、绘图板-大珩助手
放映笔 幻灯片放映时,工具在幻灯片的左下方,本工具在幻灯片的右侧,可以移动,可以方便在右侧讲课时候使用 绘图板 可在绘图板上写签名、绘制图画、写字等等,点画笔切换橡皮擦,点插入绘图,将背景…...
弧形导轨的安装注意事项
随着弧形导轨的应用日渐普遍,在日常使用中总会遇到很多各种各样的问题,原因很多是安装不正确或者使用不恰当。不合理的使用不但不能充分发挥其价值还会导致使用寿命大打折扣,使企业造成不必要的损失,因此大伙有必要了解一些安装的…...
Elasticsearch优化-04
Elasticsearch优化 1、优化-硬件选择 Elasticsearch 的基础是 Lucene,所有的索引和文档数据是存储在本地的磁盘中,具体的路径可在 ES 的配置文件…/config/elasticsearch.yml中配置,如下: # #Path to directory where to store …...
b2b网站对比/保定百度推广联系电话
1:“你相信有永远的爱吗?”“我相信的。” “你拥有过吗?”“还没有。” “那你为甚么相信?”“相信的话,比较幸福。” 2:我以为终有一天,我会彻底将爱情忘记,将你忘记, 可是,忽然有一天&…...
珠海中小企业网站建设/网站免费软件
JDBC 数据库编程基础 安装MySQL 进入官网下载页面:https://www.mysql.com/cn/downloads/ 以下红色横线标记的为mysql社区版,是免费的mysql版本: 接下来选择MySQL Community Server 这里笔者的计算机系统为windows,故选择页面下的…...
建设工程资讯哪个网站好/百度首页网址
IDC报告显示,交换机市场近年来一直保持着较高的增长势头,到2009年市场规模有望达到15.1亿美元。交换机在企业网中占有重要的地位,通常是整个网络的核心所在,这一地位使它成为******和病毒肆虐的重点对象,为保障自身网络…...
深圳网站建设信科便宜/济南seo优化
官方API说明文档 http://www.newtonsoft.com/json/help/html/N_Newtonsoft_Json.htm http://www.newtonsoft.com/ http://json.codeplex.com/ 安装:1.解压下载文件,得到Newtonsoft.Json.dll2.在项目中添加引用..序列化和反序列在.net项目中: Product product new Product(); p…...
王烨玺/优化seo设置
--《人在囧途》观后感 作者:朱金灿 来源:http://blog.csdn.net/clever101 国庆假期的一个晚上突然把电卡的电用完了,只好借同屋的笔记本来看电影,选了王宝强的《人在囧途》来看。该片讲述一个充满戏剧化的回家过年故事…...
批量入侵wordpress/拉新app渠道
背景 最近一直在做公司的应用软件服务架构的升级工作,里面涉及使用mod_proxy替换先前的mod_ajp,因为我们要用jetty7。 同时万恶的jetty 7对ajp协议支持不是很好, 具体可见我的另一篇博文: 纠结的mod_jk与jetty的组合。 在线下测…...