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

C++ for QWidget:正则表达式和QRegExp

正则表达式 

正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。以下是对正则表达式的详细介绍:

一、定义与作用

正则表达式是一种文本模式,同时也是一种强大的文本模式匹配工具,用于对字符串进行搜索、替换、匹配和验证等操作。它使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

二、构成与语法

正则表达式由普通字符(例如,a到z之间的字母)和特殊字符(称为“元字符”)组成。这些元字符在正则表达式中具有特殊意义,可以用来规定其前导字符在目标对象中的出现模式。以下是一些常见的元字符及其用法:

  • 普通字符‌:包括大小写字母、数字、标点符号及一些其他符号。

  • 转义字符‌:\,用于取消特殊符号的含义,例如 !、$等。

  • 边界符‌:

    • ^:匹配字符串开始的位置,例如 ^a、^the。
    • $:匹配字符串结束的位置,例如word:匹配字符串结束的位置,例如word、^$匹配空行。
  • 匹配任意字符‌:. 匹配除换行符之外的任意的一个字符,例如 go.d、g..d。

  • 量词‌:用于设定某个模式重复次数。

    • *:匹配前面的子表达式0次或者多次,例如 good、go.*d。
    • +:匹配前面的子表达式1次以上,例如 go+d,将匹配至少一个o,如god、good、goood等(注意,在某些工具或语言中,如egrep、awk,+ 可能不需要转义)。
    • ?:匹配前面的子表达式0次或者1次,例如 go?d,将匹配gd或god(在某些工具或语言中,? 可能不需要转义)。
    • {n}:匹配前面的子表达式n次,例如 go{2}d、'[0-9]{2}'匹配两位数字。
    • {n,}:匹配前面的子表达式不少于n次,例如 go{2,}d、'[0-9]{2,}'匹配两位及两位以上数字。
    • {n,m}:匹配前面的子表达式n到m次,例如 go{2,3}d、'[0-9]{2,3}'匹配两位到三位数字。
  • 字符集合‌:[],匹配方括号中的任意一个字符。

    • [list]:匹配list列表中的一个字符,例如 go[ola]d,[abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字。
    • [^list]:匹配任意非list列表中的一个字符,例如 [^0-9]、[^A-Z0-9]、[^a-z]匹配任意一位非小写字母。

例子:"^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$"

这个例子^标识符表示开始,$表示结束,[A-Za-z0-9]+表示匹配多次中括号表示的范围,[_\.]表示匹配_或.但由于.在正则表达式中有匹配除换行符之外的任意的一个字符的功能,所以前面添加\取消它的特殊含义,[A-Za-z0-9\-]中由于-有特殊含义所以使用了\取消特殊含义,[A-Za-z]{2,6}表示匹配中括号中的字符范围至少2次至多6次

QRegExp

一、功能特点

  1. 字符串匹配‌:QRegExp可以验证字符串是否符合指定的正则表达式模式。
  2. 字符串搜索‌:它可以在更长的文本中查找子串的匹配位置。
  3. 文本替换‌:QRegExp能够替换符合正则表达式的字符串片段。
  4. 捕获组‌:通过正则表达式中的括号,可以定义捕获组来提取匹配的子表达式内容。

二、使用方法

  1. 创建QRegExp对象‌:

    • 可以直接使用正则表达式字符串来创建QRegExp对象,例如:QRegExp regExp("a*b"); 这会匹配任何数量的'a'后面跟着一个'b'。
  2. 设置和获取正则表达式‌:

    • 使用setPattern()方法可以设置一个新的正则表达式。
    • 使用pattern()方法可以获取当前的正则表达式。
  3. 匹配操作‌:

    • 使用exactMatch()方法可以检查一个字符串是否与正则表达式完全匹配。
    • 使用indexIn()方法可以在文本中搜索匹配项,并返回匹配项的位置。
    • cap()方法用于提取捕获组的内容。
  4. 替换操作‌:

    • 虽然QRegExp本身不直接提供替换功能,但可以与QString的replace()方法结合使用来实现替换操作。例如:QString replaced = text.replace(QRegExp("ain"), "ane"); 这会将文本中的"ain"替换为"ane"。
  5. 与QLineEdit结合使用‌:

    • QRegExpValidator是一个验证器,可以与QLineEdit等输入字段结合使用,以限制输入格式。例如:QRegExp regExp("^\\d{3}-\\d{2}-\\d{4}$"); 这会匹配格式XXX-XX-XXXX的字符串,并将其作为QLineEdit的输入验证器。

例如:

QRegExp a("^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$");
bool b = a.exactMatch(ui->accountEdit->text());

 这一段代码创建了一个存放正则表达式的变量a,随后使用a.exactMatch函数判断text()的内容是否符合并用布尔值b接收

注意

使用CMake构造的项目中,可能需要在CMakeLists.txt下手动添加如下指令,否则#include<QRegExp>时检测不到:

find_package(Qt6 REQUIRED COMPONENTS Core5Compat) 
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)//mytarget修改为项目名称 

 

相关文章:

  • 提升搜索效率:深入了解Amazon Kendra的强大功能
  • ERP 与 WMS 对接深度解析:双视角下的业务与技术协同
  • origin绘图之【如何将多条重叠、高度重叠的点线图、折线图分开】
  • CASAIM与荣耀达成合作,三维数字化检测技术助力终端消费电子制造实现生产工艺智能优化
  • 【Elasticsearch】字段别名
  • RPA浪潮来袭,职业竞争的新风口已至?
  • 适合初学者的 Blender和怎么下载 Blender格式模型
  • Redis从入门到实战 - 高级篇(下)
  • C++ 输出流格式控制
  • AI加速芯片全景图:主流架构和应用场景详解
  • 多模态学习笔记
  • WordPress Madara插件存在文件包含漏洞(CVE-2025-4524)
  • Java开发-如何将一个字符串转换成一个数组,又如何把他转换成一个集合
  • C++:vector容器
  • 软考中级软件设计师——操作系统考试题型
  • 什么是“架构孤岛”?如何识别与整合?为什么现代企业在追求敏捷开发的同时,反而更容易陷入架构孤岛陷阱?
  • 网络编程概述
  • Open3D 半径滤波器
  • 使用脚本备份和还原Windows环境变量
  • 发二区利器:CNN+LSTM时序预测
  • 网站备案流程/百度竞价推广联系方式
  • 深圳做微信商城网站建设/关键词林俊杰mp3
  • 郑州政府网站建设/seo关键词布局案例
  • 郑州做网站天强科技/电脑清理软件十大排名
  • 积分商城网站开发/域名收录
  • 个人网站备案名称大全/下载百度网盘