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

正则表达式

正则表达式即一个文本匹配字符串的一种模式,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.rhkb.cn/news/253487.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

beep蜂鸣器驱动实验-蜂鸣器驱动代码框架测试

一. 简介 上一篇文章学习了编译蜂鸣器驱动框架代码&#xff0c;并进行了编译。文章地址如下&#xff1a; beep蜂鸣器驱动实验-蜂鸣器驱动框架代码实现-CSDN博客 本文对上一篇所实现的蜂鸣器框架代码进行测试。 二. 蜂鸣器驱动代码框架测试 1. 拷贝驱动程序 注意&#xf…

Android开发--实时监测系统+部署故障诊断算法

0.项目整体思路介绍&#xff1a; 搭建无人装备模拟实验平台&#xff0c;使用采集器对数据进行采集&#xff0c;通过网络通信Udp协议发送到安卓端&#xff0c;安卓端作界面显示&#xff0c;算法使用matlab仿真后&#xff0c;用C语言实现。将采集器采集到的数据经过处理后训练&a…

css1文本属性

一.颜色&#xff08;color&#xff09;&#xff08;一般用16进制&#xff09; 二.对齐&#xff08;text-align) 三.装饰&#xff08;text-decoration&#xff09; 四.缩进&#xff08;text-indent&#xff09;&#xff08;一般用2em&#xff09;&#xff08;有单位&#xff09;…

网络协议梳理

1 引言 在计算机网络中要做到有条不紊地交换数据&#xff0c;就必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。这里所说的同步不是狭义的&#xff08;即同频或同频同相&#xff09;而是广义的&#xff0c;即在一定的条件下应当发生什…

C#验证字符串是否包含汉字:用正则表达式 vs 用ASCII码 vs 用汉字的 Unicode 编码

目录 一、使用的方法 1.使用正则表达式验证字符串 2.使用正则表达式验证字符 3.用ASCII码判断 4.用汉字的 Unicode 编码范围判断 二、实例 1.源码 2.生成效果 验证一个字符串是否是纯汉字或者包含有汉字的前提&#xff0c;是VS编辑器的默认编码格式设置为&#xff1a;选…

Chrome 沙箱逃逸 -- Plaid CTF 2020 mojo

文章目录 前置知识参考文章环境搭建题目环境调试环境 题目分析附件分析漏洞分析OOBUAF 漏洞利用总结 前置知识 Mojo & Services 简介 chromium mojo 快速入门 Mojo docs Intro to Mojo & Services 译文&#xff1a;利用Mojo IPC的UAF漏洞实现Chrome浏览器沙箱逃逸原文…

JAVA SpringBoot中使用redis的事务

目录 一、Java语言介绍 二、SpringBoot框架介绍 三、Redis缓存介绍 四、什么是redis的事务 一、Java语言介绍 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司于1995年推出。它的设计目标是要求“一次编写,到处运行”&#xff08;Write Once, Run Anywhere, WOR…

逆向工程:揭开科技神秘面纱的艺术

在当今这个科技飞速发展的时代&#xff0c;我们每天都在与各种电子产品、软件应用打交道。然而&#xff0c;你是否想过&#xff0c;这些看似复杂的高科技产品是如何被创造出来的&#xff1f;今天&#xff0c;我们就来探讨一下逆向工程这一神秘而又令人着迷的领域。 一、什么是…

Topaz Photo AI for Mac v2.3.1 补丁版人工智能降噪软件无损放大

想要将模糊的图片变得更加清晰&#xff1f;不妨试试Topaz Photo AI for Mac 这款人工智能、无损放大软件。Topaz Photo AI for Mac 一款强大的人工智能降噪软件&#xff0c;允许用户使用复杂的锐化算法来提高图像清晰度&#xff0c;还包括肖像编辑选项&#xff0c;如面部重塑、…

RabbitMQ的延迟队列实现[死信队列](笔记二)

上一篇已经讲述了实现死信队列的rabbitMQ服务配置&#xff0c;可以点击: RabbitMQ的延迟队列实现(笔记一) 目录 搭建一个新的springboot项目模仿订单延迟支付过期操作启动项目进行测试 搭建一个新的springboot项目 1.相关核心依赖如下 <dependency><groupId>org.…

来看看Tomcat和Web应用的目录结构

在前面两篇大致了解了Tomcat的架构和运行流程&#xff0c;以及Tomcat应用中的web.xml。 聊一聊Tomcat的架构和运行流程&#xff0c;尽量通俗易懂一点-CSDN博客 来吧&#xff0c;好好理解一下Tomcat下的web.xml-CSDN博客 那接下来&#xff0c;再看看Tomcat的目录&#xff0c;…

【网络技术】【Kali Linux】Nmap 嗅探(一)简单扫描

一、实验环境 本次实验进行简单的Nmap扫描&#xff0c;实验使用 Kali Linux 虚拟机和 Ubuntu Linux 虚拟机完成&#xff0c;主机操作系统为 Windows 11&#xff0c;虚拟化平台选择 Oracle VM VirtualBox&#xff0c;如下图所示。 二、实验步骤 1、相关配置 Kali Linux 虚拟机…

Leaf——美团点评分布式ID生成系统

0.普通算法生成id的缺点 1.Leaf-segment数据库方案 第一种Leaf-segment方案&#xff0c;在使用数据库的方案上&#xff0c;做了如下改变&#xff1a; - 原方案每次获取ID都得读写一次数据库&#xff0c;造成数据库压力大。改为利用proxy server批量获取&#xff0c;每次获取一…

2023年ABC123公众号年刊下载(PDF电子书)

Part1 前言 大家好&#xff0c;我是ABC_123。2023年公众号正式更名为"希潭实验室"。除了分享日常红队攻防、渗透测试技术文章之外&#xff0c;重点加强了APT案例分析方面的内容。公众号关注度得到进一步提升&#xff0c;关注人数已达到3万5千人。原计划在2023年编写…

DDoS攻击激增,分享高效可靠的DDoS防御方案

当下DDoS攻击规模不断突破上限&#xff0c;形成了 "网络威胁格局中令人不安的趋势"。专业数据显示&#xff0c;对比2022年上半年与2023年上半年&#xff0c;所有行业的DDoS攻击频率增加了314%。其中零售、电信和媒体公司遭受的攻击规模最大&#xff0c;三个垂直行业的…

基于蒙特卡洛的电力系统可靠性分析matlab仿真,对比EDNS和LOLP

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 1.课题概述 电力系统可靠性是指电力系统按可接受的质量标准和所需数量不间断地向电力用户供应电力和电能量的能力的量度&#xff0c;包括充裕度和安全性两个方面。发电系统可靠性是指统一并网的全部发电机…

Django学习记录01

1.项目结构 djangoProject02 ├── manage.py 【项目的管理&#xff0c;启动项目、创建app、数据管理】【不要动】【常常用】 └── jangoProject02 ├── __init__.py ├── settings.py 【项目配置】 【常常修改】 ├── urls.py …

FANUC机器人外部远程启动的相关参数设置示例

FANUC机器人外部远程启动的相关参数设置示例 如下图所示,在MENU---设置---选择程序中,设置程序选择模式:RSR(这个根据自己实际使用的自动启动方式来决定,你用RSR选RSR,用PNS就选PNS), 自动运行开始方法:选择UOP,即RSR1-RSR8的启动信号分别对应UI9-UI16, 最后,点击…

LLM(5) | Encoder 和 Decoder 架构

LLM(5) | Encoder 和 Decoder 架构 文章目录 LLM(5) | Encoder 和 Decoder 架构0. 目的1. 概要2. encoder 和 decoder 风格的 transformer (Encoder- And Decoder-Style Transformers)原始的 transformer (The original transformer)编码器 (Encoders)解码器 (Decoders)编码器和…

[当人工智能遇上安全] 11.威胁情报实体识别 (2)基于BiGRU-CRF的中文实体识别万字详解

您或许知道&#xff0c;作者后续分享网络安全的文章会越来越少。但如果您想学习人工智能和安全结合的应用&#xff0c;您就有福利了&#xff0c;作者将重新打造一个《当人工智能遇上安全》系列博客&#xff0c;详细介绍人工智能与安全相关的论文、实践&#xff0c;并分享各种案…