第三篇:跨平台QT开发-正则表达式和文件处理

news2024/11/24 19:02:21

正则表达式

正则表达式即一个文本匹配字符串的一种模式,Qt 中 QRegExp 类实现使用正则表达式
进行模式匹配,且完全支持 Unicode,主要应用:字符串验证、搜索、查找替换、分割。
正则表达式中字符及字符集  
元素含义
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
(?=E)
表达式后紧跟 E 才匹配
(?!E)
表达式后不跟 E 才匹配
通配符
含义
c任意一个字符,表字符本身
任意一个字符,类似 regexp 中“.”
*
任意 0 个或多个字符
[...]
在[]中的字符集

QRegExp reg("ab");
    qDebug() << "匹配字符串本身";
    qDebug() << reg.exactMatch("abc");
    qDebug() << reg.exactMatch("ab");
    QRegExp reg0("(\\d*\\.\\D{2})");
    qDebug() << "匹配数字" << reg0.exactMatch("195.cm") << reg0.exactMatch("cm");
    //设置匹配语法
    QRegExp reg1("*.txt");
    reg1.setPatternSyntax(QRegExp::Wildcard); //支持通配符
    qDebug() << "支持通配符: " << reg1.exactMatch("当前hi.txt") << reg1.exactMatch(".txt");
    //匹配单词边界
    QRegExp reg2;
    reg2.setPattern("\\b(hello|word)\\b");
    qDebug() << "匹配到的单词的起始位置(以单词为单位):" << reg2.indexIn(" hello")
             << reg2.indexIn("wdf");
    QRegExp reg3("(\\d+)(?:\\s*)(cm|icn)");
    int index = reg3.indexIn("YaoMing 222 cm");
    if (index > -1) {
        qDebug() << "文本捕获:" << reg3.cap(0) << "cap(1): " << reg3.cap(1)
                 << "cap(2): " << reg3.cap(2);
    }
    QRegExp reg4("面(?!包)"); //(?!):不紧跟才匹配
    QString str = "吃面包,面包使用面粉做的,面粉可以做面食物";
    qDebug() << str;
    str.replace(reg4, "薯条");
    qDebug() << str; 

QRegularExpression regexp("hello");
    qDebug() << "QRegularExpression匹配字符" << regexp.match("hellow");
    regexp.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
    qDebug() << "QRegularExpression使用大小写不敏感之后匹配字符" << regexp.match("Hellow");
    QRegularExpression qData("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$");
    QRegularExpressionMatch mach = qData.match("01/01/2024");
    QString mach0 = mach.captured(0);
    QString day = mach.captured(1);
    QString month = mach.captured(2);
    QString year = mach.captured(3);
    if (mach.hasMatch()) {
        qDebug() << "捕获的文本:" << mach0 << "天: " << day << "月: " << month << "年: " << year;
    }
    QString setPatten;
    setPatten = "^(Jan|Fei|Mar|Apr|May) \\d\\d \\d\\d\\d\\d";
    QRegularExpression Qdata(setPatten); //将字符串作为正则表达式

    QRegularExpressionMatch mach2
        = Qdata.match("Jan 01", 0, QRegularExpression::PartialPreferCompleteMatch); //部分匹配
    if (mach2.hasPartialMatch()) {
        qDebug() << mach2.hasMatch() << mach2.hasPartialMatch();
    }

 

 文件处理

QFile 类用于文件操作,它提供了读写文件的接口,可以读写文件、二进制文件和 Qt 资源文件。 处理文本文件和二进制文件, 可以使用 QTextStream 类和 QDataStream 类 。处理临时文件可以使用 QTemporaryFile, 获取信息可以使用 QFileInfo,处理目录可以使用 QDir ,监视文件和目录变化可以使用 QFileSystemWatcher.

QTextStream 的流操作符 

操作符
作用描述
bin
设置读写的整数为 二进制数
oct
设置读写的整数为 八进制数
dec
设置读写的整数为十进制数
hex
设置读写的整数为十六进制数
showbase
强制显示进制前缀,如十六进制(0x)、八进制(0)、二进制(0b)
forcesign
强制显示符号(+、-)
forcepoint
强制显示小数点
noshowbase
强制不显示前缀
noforcesign
强制不显示符号
uppercasebase
显示大写的进制前缀
lowercasebase
显示小些的进制前缀
uppercasedigits
用大写字母表示
lowercasedigits
用小写字母表示
fixed
固定小数点表示
scientific
科学计数法表示
left
左对齐
right
右对齐
center
居中
endl
换行
flush
清除缓冲

#include "QDataStream"
#include "QDate"
#include "QDebug"
#include "QFile" 

   QFile file;
    file.setFileName("user.txt");
    //读取文件
    if (file.open(QIODevice::ReadOnly)) {
        char buff[100];
        qint32 n;
        n = file.readLine(buff, sizeof(buff));
        if (n != -1) {
            qDebug() << "长度: " << n << "内容: " << buff;
            file.close();
        }
    } else {
        qDebug() << file.errorString();
    }
    //文件写入
    double dPI = 3.14159;
    int age = 32;
    QFile file1;
    file1.setFileName("data.txt");
    if (file1.open(QIODevice::WriteOnly | QIODevice::Truncate)) { //覆盖
        QTextStream out(&file1);
        out << QString("PI: ") << qSetRealNumberPrecision(3) << right << qSetFieldWidth(10) << dPI
            << endl
            << bin << qSetFieldWidth(10) << left << age;
    }
    file1.close();
    //二进制文件读写
    QFile bininfo;
    bininfo.setFileName("info.bat");
    if (bininfo.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
        QDataStream out(&bininfo);
        out << QString("文博波") << QDate::fromString("2024-01-25", "yyyy-MM-dd") << (qint32) 25;
    }
    bininfo.close();
    if (bininfo.open(QIODevice::ReadOnly)) {
        QDataStream in(&bininfo);
        QString name;
        QDate time;
        qint32 age;
        in >> name >> time >> age;
        qDebug() << name << time << age;
    }

获取文件信息 

 #include "QDateTime"
#include "QFileDialog"

 

void Widget::infoFile(QString &filename)
{
    QFileInfo info(filename);
    qint64 size = info.size();
    QDateTime createTime = info.created();
    QDateTime modifyTime = info.lastModified();
    QDateTime readTime = info.lastRead();

    bool isDic = info.isFile();
    bool isDir = info.isDir();
    bool isSym = info.isSymLink();
    bool isread = info.isReadable();
    bool isWrite = info.isWritable();
    bool isHidden = info.isHidden();
    bool isExcu = info.isExecutable();
    ui->CreateTimeLineEdit->setText(createTime.toString());
    ui->DicSizeLineEdit->setText(QString::number(size));
    ui->LastReadLineEdit->setText(readTime.toString());
    ui->LastModifyLineEdit->setText(modifyTime.toString());

    //设置属性按钮
    ui->xad->setChecked(isDic);
    ui->xal->setChecked(isSym);
    ui->xah->setChecked(isHidden);
    ui->xar->setChecked(isread);
    ui->xaw->setChecked(isWrite);
    ui->xae->setChecked(isExcu);
    ui->xaf->setChecked(isDir);
}

void Widget::on_DicFileBtn_clicked()
{
    //获取文件
    // QString filename = QFileDialog::getOpenFileName(this,
    //                                                 "打开文件",
    //                                                 "./",
    //                                                 "C++(*.cpp);;"

    //                                                 "C  (*.c);;"
    //                                                 "Head file(*.h)");
    //获取文件夹
    QString filename = QFileDialog::getExistingDirectory(this, "获取文件", "./");
    ui->DicFilelineEdit->setText(filename);
    infoFile(filename); //把参数传出去

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

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

相关文章

《Python 网络爬虫简易速速上手小册》第8章:分布式爬虫设计(2024 最新版)

文章目录 8.1 分布式爬虫的架构8.1.1 重点基础知识讲解8.1.2 重点案例&#xff1a;使用 Scrapy 和 Scrapy-Redis 构建分布式爬虫8.1.3 拓展案例 1&#xff1a;使用 Kafka 作为消息队列8.1.4 拓展案例 2&#xff1a;利用 Docker 容器化工作节点 8.2 分布式任务管理8.2.1 重点基础…

数模.matlab符号计算方程

一、符号函数 a&#xff1a;整理简化&#xff1a; b&#xff1a;因式分解&#xff1a; c&#xff1a;多项式展开 d&#xff1a;合并&#xff1a; e&#xff1a;计算分子分母&#xff1a; f&#xff1a;求导&#xff1a; f&#xff1a;差分&#xff1a; g&#xff1a;不定积分&a…

CSP-202312-2-因子化简(质数筛法)

CSP-202312-2-因子化简 一、质数筛法 主流的质数筛法包括埃拉托斯特尼筛法&#xff08;Sieve of Eratosthenes&#xff09;、欧拉筛法&#xff08;Sieve of Euler&#xff09;、线性筛法&#xff08;Linear Sieve&#xff09;等。这些算法都用于高效地生成一定范围内的质数。 …

关于创建vue项目报错command failed: npm install --loglevel error

一、首先 在这个目录下有个文件叫.vuerc 二、其次 进去之后把里面的"useTaobaoRegistry": false,修改下&#xff0c;我之前是true&#xff0c;后来改成了false才成功。

FPGA_ip_Rom

一 理论 Rom存储类ip核&#xff0c;Rom是只读存储器的简称&#xff0c;是一种只能读出事先存储数据的固态半导体存储器。 特性&#xff1a; 一旦储存资料&#xff0c;就无法再将之改变或者删除&#xff0c;且资料不会因为电源关闭而消失。 单端口Rom: 双端口rom: 二 Rom ip核…

深入解析大型数据中心云平台的网络技术与实践

最简单的总结 SDN主流选择了OverLay。虚拟集群的规模(非物理机所能比拟) 使得Vxlan的组播传播&#xff08; 虚拟机构成的集群包含的 MAC 地址数量往往多一两个数量级 MAC地址表 &#xff09;对网络设备性能要求巨大(你不可能每个交换机都买核心交换机一样的配置吧&#xff09;…

CSP-201912-1-报数

CSP-201912-1-报数 知识点总结 整数转化为字符串#include <string> string str_num to_string(num);字符串中查找是否包含字符‘7’&#xff1a;str_num.find(7) 未找到返回-1找到返回返回该字符在字符串中的位置&#xff08;即第一次出现的索引位置&#xff09; #i…

嵌入式中《C++之旅》阅读笔记

constexpr constexpr的隐含意思是在编译阶段求值&#xff0c;对于一些求值操作&#xff0c;如果声明为constexpr&#xff0c;那么会编译器会尝试在编译阶段进行计算求值&#xff0c;如果求值成功&#xff0c;则用结果进行替换。 一个常用的例子是如下&#xff1a; constexpr…

Linux笔记之Docker进行镜像备份与迁移

Linux笔记之Docker进行镜像备份与迁移 ——2024-02-11 code review! 文章目录 Linux笔记之Docker进行镜像备份与迁移1. 导出容器文件系统为 tar 归档文件2. 将 tar 归档文件导入为新的 Docker 镜像3. 运行新的 Docker 镜像并创建容器 1. 导出容器文件系统为 tar 归档文件 要导…

【漏洞复现】狮子鱼CMS文件上传漏洞(image_upload.php)

Nx01 产品简介 狮子鱼CMS&#xff08;Content Management System&#xff09;是一种网站管理系统&#xff0c;它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能&#xff0c;包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…

第5讲小程序微信用户登录实现

小程序微信用户登录实现 小程序登录和jwt&#xff0c;httpclient工具类详细介绍可以看下小锋老师的 小程序电商系统课程&#xff1a;https://www.bilibili.com/video/BV1kP4y1F7tU application.yml加上小程序登录需要的参数&#xff0c;小伙伴们可以登录小程序后台管理&#…

依赖注入的艺术:编写可扩展 JavaScript 代码的秘密

1. 依赖注入 在 JavaScript 中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是一种软件设计模式&#xff0c;通过这种模式&#xff0c;可以减少代码模块之间的紧耦合。依赖注入允许开发者将模块的依赖关系从模块的内部转移到外部&…

【STL】vector模拟实现

vector模拟实现 一、vector函数接口总览二、vector当中的成员介绍三、list模拟实现1、默认成员函数&#xff08;1&#xff09;构造函数1&#xff08;2&#xff09;构造函数2&#xff08;3&#xff09;构造函数3 2、拷贝构造函数&#xff08;1&#xff09;写法一&#xff1a;老式…

最新酒桌小游戏喝酒小程序源码,带流量主,附带搭建教程

喝酒神器&#xff0c;增加了广告位&#xff0c;根据文档直接替换即可&#xff0c;原版本没有广告位 直接上传源码到开发者端即可 通过后改广告代码&#xff0c;然后关闭广告展示提交&#xff0c;通过后打开即可 搜索adunit-848e5f13d1ff237a替换为你的Banner 搜索adunit-597…

Linux操作系统基础(十一):RPM软件包管理器

文章目录 RPM软件包管理器 一、rpm包的卸载 二、rpm包的安装 RPM软件包管理器 rpm&#xff08;英文全拼&#xff1a;redhat package manager&#xff09; 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项软件包的程序&#xff0c;由于它遵循GPL规则且功能强大方便&…

Python中使用opencv-python进行人脸检测

Python中使用opencv-python进行人脸检测 之前写过一篇VC中使用OpenCV进行人脸检测的博客。以数字图像处理中经常使用的lena图像为例&#xff0c;如下图所示&#xff1a; 使用OpenCV进行人脸检测十分简单&#xff0c;OpenCV官网给了一个Python人脸检测的示例程序&#xff0c;…

sympy斐波那契数列

文章目录 fibonaccitribonacci对比 fibonacci 斐波那契数列的递推公式大家都很熟悉了&#xff0c;是 F n F n − 1 F n − 2 F_nF_{n-1}F_{n-2} Fn​Fn−1​Fn−2​&#xff0c;其在复数域的的解析延拓可表示为 F z ϕ z − cos ⁡ ( π z ) ϕ − z 5 , ϕ 5 − 1 2 F_z\…

3D高斯溅射:面向三维场景的实时渲染技术

1. 前言 高斯溅射技术【1】一经推出&#xff0c;立刻引起学术界和工业界的广泛关注。相比传统的隐式神经散射场渲染技术&#xff0c;高斯溅射依托椭球空间&#xff0c;显性地表示多目图像的三维空间关系&#xff0c;其计算效率和综合性能均有较大的提升&#xff0c;且更容易理…

电动汽车上哪些部位用到了电机?

一、背景 电动汽车中除了主驱动电机之外的其他电机的控制复杂度因电机的种类和功能而异。 一般来说&#xff0c;助力转向电机、空调风扇电机、冷却水泵电机等辅助电机的控制相对较为简单。这些电机通常只需要进行简单的开/关控制或速度调节&#xff0c;以满足车辆的基本需求。…

第三百一十七回

文章目录 1. 概念介绍2. 实现方法2.1 hintText2.2 labelText2.3 controller 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何在输入框中处理光标"相关的内容&#xff0c;本章回中将介绍如何添加输入框默认值.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…