当前位置: 首页 > news >正文

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 匹配字符本身&#xff0c;如a匹配a \c 跟在\后面的字符匹配字符本身&#xff0c;但本表中下面指定的这些字符除外。 \a 匹…...

Redis设计与实现之跳跃表

目录 一、跳跃表 1、跳跃表的实现 2、跳跃表的应用 3、跳跃表的时间复杂度是什么&#xff1f; 二、跳跃表有哪些应用场景&#xff1f; 三、跳跃表和其他数据结构&#xff08;如数组、链表等&#xff09;相比有什么优点和缺点&#xff1f; 四、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、标点与时间戳功能&#xff0c;可直接对时长为数小时音频进行识别&#xff0c;并输出带标点文字与时间戳&#xff1a; ASR模型…...

C语言中的柔性数组

uint8_t data[0];代码的含义老虎开始对这个数组不太了解&#xff0c;查阅后得知这是个柔性数组。 C语言中的柔性数组&#xff08;Flexible Array Member&#xff09;是一种特殊的数组&#xff0c;它被定义在结构体的最后一个元素中&#xff0c;其大小未知&#xff0c;也就是所…...

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 &#xff0c;两者的底层的数组value并没有使用private和final修饰&#xff0c;所以是可变的。 AbstractStringBuilder 源码如下所示 ab…...

R语言piecewiseSEM结构方程模型在生态环境领域实践技术

结构方程模型&#xff08;Sructural Equation Modeling&#xff0c;SEM&#xff09;可分析系统内变量间的相互关系&#xff0c;并通过图形化方式清晰展示系统中多变量因果关系网&#xff0c;具有强大的数据分析功能和广泛的适用性&#xff0c;是近年来生态、进化、环境、地学、…...

IDEA设置查看JDK源码

问题 我们在查看JDK源码时&#xff0c;可能会遇到这种情况&#xff0c;步入底层查看JDK源码时&#xff0c;出现一堆var变量&#xff0c;可读性非常之差&#xff0c;例如笔者最近想看到nio包下的SocketChannelImpl的write方法&#xff0c;结果看到这样一番景象&#xff1a; pu…...

SSM—Mybatis

目录 和其它持久化层技术对比 搭建MyBatis 开发环境 创建maven工程 创建MyBatis的核心配置文件 创建mapper接口 创建MyBatis的映射文件 通过junit测试功能 加入log4j日志功能 核心配置文件详解 MyBatis的增删改查 新增 删除 修改 查询一个实体类对象 查询list集…...

MYSQL在不删除数据的情况下,重置主键自增id

MYSQL在不删除数据的情况下&#xff0c;重置主键自增id 方法一&#xff1a; SET num : 0; UPDATE table_name SET id num : (num1); ALTER TABLE table_name AUTO_INCREMENT 1; 方法二&#xff1a; 背景(mysql 数据在进行多次删除新增之后id变得很大&#xff0c;但是并没…...

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 文件的结构&#xff0c;在网上有很多的学习资料&#xff0c;这里只介绍些容易混淆的概念&#xff0c;作为回看笔记。 1. 传输语法 每个传输语法&#xff0c;起都是表达的三个概念&#xff1a;大小端、显隐式、压缩算法 DICOM Implicit VR Little Endian: 1.2.840.1000…...

git 的使用

git reset详解-CSDN博客 git reset 命令详解 git revert命令详解。-CSDN博客 关于Git分支中HEAD和Master的理解 - 知乎 (zhihu.com) 一文带你精通 Git&#xff08;Git 安装与使用、Git 命令精讲、项目的推送与克隆&#xff09;-CSDN博客 Git 常用操作&#xff08;5&#xff…...

详解—【C++】lambda表达式

目录 前言 一、lambda表达式 二、lambda表达式语法 2.1. lambda表达式各部分说明 2.2. 捕获列表说明 三、函数对象与lambda表达式 前言 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #i…...

Qt Desktop Widgets 控件绘图原理逐步分析拆解

Qt 是目前C语言首选的框架库。之所以称为框架库而不单单是GUI库&#xff0c;是因为Qt提供了远远超过GUI的功能封装&#xff0c;即使不使用GUI的后台服务&#xff0c;也可以用Qt大大提高跨平台的能力。 仅就界面来说&#xff0c;Qt 保持各个平台绘图等效果的统一&#xff0c;并…...

什么是rocketmq❓

在大规模分布式系统中&#xff0c;各个服务之间的通信是至关重要的&#xff0c;而RocketMQ作为一款分布式消息中间件&#xff0c;为解决这一问题提供了强大的解决方案。本文将深入探讨RocketMQ的基本概念、用途&#xff0c;以及在实际分布式系统中的作用&#xff0c;并对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似乎让每个行业有了改造的可能性&#xff0c;电商行业也不例外。 在讨论了很多流量红利消失的话题后&#xff0c;我们看到互联网电商行业不再性感&#xff0c;从淘宝天猫&#xff0c;京东&#xff0c;到拼多多&#xff0c;再到抖音&#xff0c;快手&#xff0c;电…...

云原生向量计算引擎 PieCloudVector:为大模型提供独特记忆

拓数派大模型数据计算系统&#xff08;PieDataComputingSystem&#xff0c;缩写&#xff1a;πDataCS&#xff09;在10月24日程序员节「大模型数据计算系统」2023拓数派年度技术论坛正式发布。πDataCS 以云原生技术重构数据存储和计算&#xff0c;「一份存储&#xff0c;多引擎…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

基于Uniapp的HarmonyOS 5.0体育应用开发攻略

一、技术架构设计 1.混合开发框架选型 &#xff08;1&#xff09;使用Uniapp 3.8版本支持ArkTS编译 &#xff08;2&#xff09;通过uni-harmony插件调用原生能力 &#xff08;3&#xff09;分层架构设计&#xff1a; graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...