QRegexp、QRegularExpression的用法学习

2023-11-19

QRegexp、QRegularExpression的用法学习

QRegexp

  • Regexp 由表达式(expressions) 量词(quantifiers) 断言(assertions)
int QRegExp::indexIn()		//匹配成功返回索引   失败 -1
setPattern() 		//输入一个RegExp
replace()    //匹配替换
“^” 在“[]”中开始的位置  表达相反的意思 如[^abc] 匹配除abc以外的字符
“-”   表示一个范围的字符   [A-Z];

在这里插入图片描述
在这里插入图片描述

  • E 代表一个表达式 一个表达式可以是一个字符,或者每一个字符集缩写或者 方括号中的一个字符集,或者括号中的一个表达式

  • 量词一般是”贪婪的“(尽可能的去匹配多个) setMinimal (true) 设置为”非贪婪”

  • E{n,m} : "n"表示匹配至少匹配 n次 "m"表示至多匹配 m次
    在这里插入图片描述

  • 断言 不匹配任何字符
    在这里插入图片描述

QRegExp re("^\\d\\d?$");            // ^字符串开头   $字符串结尾 字面意思  匹配规则 两个纯数字
qDebug()<<re.indexIn("1c");
qDebug()<<re.indexIn("9");
qDebug()<<re.indexIn("c2");
qDebug()<<re.indexIn("23");
qDebug()<<re.indexIn("256");

qDebug()<<"******************";
re.setPattern("\\b(mail|letter)\\b");        // \b匹配字符串边界  \转义字符
qDebug()<<re.indexIn("emailletter");
qDebug()<<re.indexIn("my mail");
qDebug()<<re.indexIn("my email letter");

qDebug()<<"******************";
re.setPattern("Q(?!t)");
QString str = "Hi I'm Q";
str.replace(re,"Qt");
qDebug()<<"str:"<<str;
QString str2="I used Q,your used Q too,his used Qt";
str2.replace(re,"Qt");
qDebug()<<"str2:"<<str2;
qDebug()<<"******************";
QString str3="One Eric another Eirik, and an Ericsson"
    "How many Eiriks,Eric?";
QRegExp re2("\\bEi?ri[ck]\\b");             //  匹配E ric Ei rik
int pos =0;
int count = 0;
while (pos >=0)
{
    pos = re2.indexIn(str3,pos);
    if(pos >=0)
    {
        ++pos;
        ++count;
    }
}
qDebug()<<"count:"<<count;
  • setPatternSyntax() //切换不同的匹配方式

  • 在这里插入图片描述

  • 通配符 一种比QRegExp 更简单的匹配方式
    -在这里插入图片描述

    //通配符
    qDebug()<<"********************";
    QRegExp re3("*.txt");
    re3.setPatternSyntax(QRegExp::Wildcard);  //通配符
    qDebug()<<re3.exactMatch("readme.txt");
    qDebug()<<re3.exactMatch("welcome.txt.bat");
    
  • cap() 0 全匹配 1左边第一个括号的匹配结果 捕获匹配结果

    qDebug()<<"********************";
    //文本捕获
    QRegExp re4("(\\d+)");
    QString str4="Offsets:12 14 99 256 99";
    QStringList list;
    int pos2 =0;
    
    while((pos2=re4.indexIn(str4,pos2)) !=-1)
    {
    list<<re4.cap(1);                   //捕获到的第一个文本
    pos2 +=re4.matchedLength();         //上一个匹配到的字符串的长度
    
    }
    qDebug()<<list;
    QRegExp relen("(\\d+)(?:\\s*)(cm|inch)");
    int pos3=relen.indexIn("Length: 189cm");
    if(pos3>-1)
    {
    QString value =relen.cap(1);
    QString unit = relen.cap(2);
    QString string = relen.cap(0);
    qDebug()<<value<<unit<<string;
    }
    QRegExp re5("\\b(\\w+)\\W+\\1\\b");
    re5.setCaseSensitivity(Qt::CaseInsensitive);   //不区分大小写
    qDebug()<<re5.indexIn("Hello--hello");
    qDebug()<<re5.cap(0);
    qDebug()<<re5.cap(1);
    QRegExp re6("\\b你好\\b");
    qDebug()<<re6.indexIn("你好");
    qDebug()<<re6.cap(0);       //整个字符串完全匹配  使用cap(0) 捕获
    

QValidator 验证器

QRegularExpression

模式选项

在这里插入图片描述
在这里插入图片描述

//方式一
QRegularExpression re("Qt rocks",QRegularExpression::CaseInsensitiveOption);
//方式二
QRegularExpression re("^\\d+$")
re.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
QRegularExpression::PatternOptions  options =re.patternOptions()   //获取模式设置
//QRegularExpression
qDebug()<<"******************";
QRegularExpression regexp("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$");
QRegularExpressionMatch match = regexp.match("28/10/2020");
if(match.hasMatch())
{
QString matched = match.captured(0);
QString day = match.captured(1);
QString month = match.captured(2);
QString year = match.captured(3);
qDebug()<<"matched:"<<matched;
qDebug()<<"day:"<<day;
qDebug()<<"month :"<<month;
qDebug()<<"year :"<<year;
}

QString pattern("^(Jan|Feb|Mar|APr|May)\\s\\d\\d?,\\d\\d\\d\\d$");
QRegularExpression rel(pattern);
QString input("Jan 21,2020");
QRegularExpressionMatch match1 = rel.match(input,0,QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match1.hasMatch();         //完全匹配
bool hasPartialMath = match1.hasPartialMatch();    //返回部分匹配结果
qDebug()<<"部分匹配的全部结果"<<match1.captured(0);
qDebug()<<"hasMatch:"<<hasMatch<<"hasPartialMath:"<<hasPartialMath;

QRegularExpression ret("\\d\\d\\w+");
QRegularExpressionMatch match2=ret.match("12 abd 56 def",1);   //设置偏移为1  会跳过第一个匹配到的数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QRegexp、QRegularExpression的用法学习 的相关文章

  • 安装多个版本的 Qt 库

    我在windows中安装了QtSDK 它的Qt库版本是4 7 0 现在我想为 mingw 和 VS2008 安装 Qt 库版本 4 8 2 我怎样才能做到这一点 如何向QtCreator引入多个版本 注意 我已经从以下位置下载了库http
  • setContextProperty 和对象的 setProperty 之间的区别

    我现在真的很困惑 有什么区别 QQmlApplicationEngine engine engine rootContext setContextProperty myObject userData and object gt setPro
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • 如何将图标放置到 QLineEdit 上?

    stackoverflow com 网站的右上角有一个带有放大镜头的搜索字段和一个灰色的 搜索 关键字 我想知道是否有可能实现相同的外观QLineEdit 如果是这样那怎么办 QLineEdit lineEdit new QLineEdit
  • 在 QtCreator 中将 OpenCV 2.3 与 Qt 结合使用

    随着 OpenCV 2 3 版本终于发布 我想在我的系统上编译并安装这个最新版本 由于我经常使用 Qt 和 QtCreator 我当然希望能够在我的 Qt 项目中使用它 我已经尝试了几种方法几个小时 但总是出现错误 第一次尝试 使用WITH
  • Qt程序部署到多平台,如何?

    我是 Qt 编程新手 我想开发一个程序 我想在 Windows Linux ubuntu 和 Mac 上运行 听说Qt支持多平台应用程序开发 但我的问题是 在我部署或编译后 任何 Qt 库都需要在 Ubuntu 中运行这个应用程序吗 如果您
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 程序意外完成 - QT Creator

    我正在尝试使用 QT Creator 使用 QT 框架开发 GUI 控制台应用程序 我使用的是Windows XP 我安装了QT 4 8 3和mingw 两者均已安装 没有任何错误 然后我安装了QT Creator QT 版本 路径中的 Q
  • Qt 创建者 + MITK (Linux)

    我正在尝试使用MITK 与 Qt Creator 我已经通过 ccmake 成功编译并使用了 VTK 和 ITK 我已经编译了 MITK超级建造模式 它下载 CTK VTK ITK 等 然后我就配置好了 我已经用 make 编译了 大约两个
  • QTextEdit.find() 在 Python 中不起作用

    演示问题的简单代码 usr bin env python import sys from PyQt4 QtCore import QObject SIGNAL from PyQt4 QtGui import QApplication QTe
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • 在 Qt5 中,是否需要 Q_INVOKABLE 来从 QML 调用公共 QObject 函数?

    我刚刚意识到我可以调用暴露于 QML 的对象的几乎任何函数 现在我对 Q INVOKABLE 很好奇 Qt5docs http doc qt io qt 5 qtqml cppintegration exposecppattributes
  • 向 Qt 样式表添加特异性时丢失样式

    这是我的代码 const QString STYLE SHEET background color rgba x x x y border 1px solid gray border radius 0px border top 1px so
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • Qt:在多个布局中使用一个小部件

    我有一个 QTabBar 所有选项卡都应该有相同的小部件 layout1 gt addWidget w layout2 gt addWidget w 然而打电话addWidget第二次导致该小部件在第一个布局中消失 有没有办法使用一个小部件
  • 无法在带有 QSortFilterProxyModel 的 QTreeView 的点击信号中使用 itemFromIndex

    我有一个 QTreeView 在视图和 QStandardItemModel 之间有一个 QSortFilterProxyModel 来对树进行排序 然后我想通过 clicked 信号对视图中的点击进行操作 模型 视图的设置类似于 mymo
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • Qt 是否已经有了自己的 new 和 delete 运算符?

    我正在使用一个QGraphicsScene小部件并在其上显示一些点QGraphicsRectItem 这意味着要拨打很多电话new addItem 当出现时 并且removeItem delete摆脱未使用的点 当然 对于性能问题 我已经实
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub

随机推荐

  • CTex的基本用法

    主要内容 Latex简介 命令和环境 文档排版和组织 普通文本编辑 数学公式编辑 图形 插图 表格 文献等的编辑 一 Latex简介 1 概述 首先要从TEX介绍起 TEX是斯坦福大学的教授Donald E Knuth 图灵奖获得者 开发的
  • django.db.utils.DataError: (1406, “Data too long for column ‘name‘ at row 1“)

    报错现象 django db utils DataError 1406 Data too long for column name at row 1 排除故障 当时第一反应是上网百度 结果搜出来的结果都是改字符集 但明显我这个和字符集关系不
  • 单片机语音识别原理

    语音识别是一门交叉学科 近二十年来 语音识别技术取得显著进步 开始从实验室走向市场 人们预计 未来10年内 语音识别技术将进入工业 家电 通信 汽车电子 医疗 家庭服务 消费电子产品等各个领域 语音识别听写机在一些领域的应用被美国新闻界评为
  • 基于SSM框架的多文件上传Controller类编写

    前端代码
  • Spring Boot 从Json静态文件中读取数据

    Spring Boot 从Json静态文件中读取数据 在实体中 通常使用类似字典表的文件来表示属性 文件大都配置在配置文件中 也可以是静态文件 本次记录如何从静态json文件中读取所需字段 1 文件格式以及路径 2 加载文件 import
  • QT进程间通信 详细介绍

    在QT中 信号和槽的机制取代了这种繁杂的 易崩溃的对象通信机制 信号是当对象状态改变时所发出的 槽是用来接收发射的信号并响应相应事件的类的成员函数 信号和槽的连接是通过connect 函数来实现的 AD 1 QT通信机制 为了更好的实现QT
  • MVC三层架构

    1 什么是MVC Model View Controller 模型 视图 控制器 模型就是Java对应数据库的那些字段 实体类 视图 就是JSP页面 控制器 就是Servlet负责跳转页面 Controller作用 Controller其实
  • Android addview—动态添加view

    一 前言 在日常的开发中经常遇到需要动态添加子view的情况 addview是ViewGroup的特有方法 可以在布局中动态添加view 而view是不存在这个方法的 二 使用方式 1 方法介绍 addview有以下几种方式 addView
  • vue+websocket+express+mongodb实战项目(实时聊天)(二)

    原项目地址 vue websocket express mongodb实战项目 实时聊天 一 http blog csdn net blueblueskyhua article details 70807847 github地址 https
  • JAVA按钮编程_Java编程实现swing圆形按钮实例代码

    Swing是一个为Java设计的GUI工具包 Swing是JAVA基础类的一部分 Swing包括了图形用户界面 GUI 器件如 文本框 按钮 分隔窗格和表 Swing提供许多比AWT更好的屏幕显示元素 它们用纯Java写成 所以同Java本
  • Linux——pthread_create()

    1 pthread create pthread create是 Unix Linux Mac OS X 等操作系统的创建线程的函数 它的功能是创建线程 实际上就是确定调用该线程函数的入口点 在线程创建以后 就开始运行相关的线程函数 函数原
  • KITTI SOTA!Dual Fusion:减少Lidar-Camera融合特征不对齐问题

    点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 多传感器融合 技术交流群 后台回复 多传感器融合综述 获取图像 激光雷达 毫米波雷达融合综述等干货资料 摘要 融合来自相机和激光雷达传感器的数据是
  • 基于ICL8038的正弦波、方波和三角波发生器protues仿真设计

    一 设计任务与要求 设计 组装 调试信号发生器电路 使它能输出正弦波 方波和三角波 可采用集成芯片ICL8083 其频率在20HZ 20KHZ范围内连续可调 输出正弦波 方波 三角波 正弦波 二 原理电路设计 1 设计方案 方案的结构框图如
  • ToBase64String方法 - 理想的地方的日志 - 网易博客

    用ToBase64String方法可以在不丢失数据的情况下将字节数组转成字符串 在ToBase64String方法中 会对字节数组中的连续三字节进行一次编码 编码得的字符串长度为4位 而且得出来的4位的字符串里面的字符肯定是由大小写字母 数
  • 如何发现系统改进点,优化点,提高点,新系统 边界感不要太强

    技术人员规划能力 如何规划新的系统 技术规划能力 个人渣记录仅为自己搜索用的博客 CSDN博客 1 协作中 双方系统对接 边界感不要太强 肯定会不爽 不爽的点里可以挖掘改进点 肯定会有很多冲突 对方技能欠缺 对方耽误你的时间 可以想下有没有
  • 三分钟阿里云服务器u1通用算力型性能、使用限制及费用说明

    阿里云服务器u1是通用算力型云服务器 CPU采用2 5 GHz主频的Intel R Xeon R Platinum处理器 通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景 比如业务HA
  • 关于人脸识别的心得随笔(持续更新)

    2020 4 25 目前 在监控系统图像中 可以将肤色作为人脸识别的依据 RGB颜色空间是由三基色组成 亮度色度混合 肤色聚集效果差 需要转换到亮度与色度分离的模型 HSV模型 其中的脸部区域像素H分量中 效果最佳 已知的数据降维的算法有
  • Connection.setAutoCommit使用的注意事项

    setAutoCommit总的来说就是保持数据的完整性 一个系统的更新操作可能要涉及多张表 需多个SQL语句进行操作 循环里连续的进行插入操作 如果你在开始时设置了 conn setAutoCommit false 最后才进行conn co
  • Spring-messaging (STOMP) @SendTo 与 @SendToUser的区别

    SendTo 与 SendToUser 是Spring的STOMP协议中注解的标签 SendTo 会将接收到的消息发送到指定的路由目的地 所有订阅该消息的用户都能收到 属于广播 SendToUser 消息目的地有UserDestinatio
  • QRegexp、QRegularExpression的用法学习

    QRegexp QRegularExpression的用法学习 文章目录 QRegexp QRegularExpression的用法学习 QRegexp QRegularExpression 模式选项 QRegexp Regexp 由表达式