当前位置: 首页 > 网络知识

Qt 正则表达式 QRegularExpression

时间:2026-01-29 09:27:16

正则表达式 QRegularExpression 学习
  在 Qt 中有两种和正则相关的类,一种是 QRegExp 类,今天查资料说的好像是从 Qt4 传承下来的,BUG 相对来说比较多,目前基本已停止维护了,多用于正则匹配,还有一种就是今天要讲的 QRegularExpression 类,是 Qt5 新开辟出来的类,相对来说比较完善(网上这样说的,具体有待考证),从 5.0 版本就引入的一个新类(这个在官方文档有说明,已证实),有正则匹配功能,同 QRegularExpressionMatch 类与 QRegularExpressionMatchIterator 类一同使用,具备字符串截取功能(这是今天讲的重点)。

一、判断正则表达是是否有效

isValid() 是 QRegularExpression 类判断正则表达式是否有效的方法

QRegularExpression::isValid() 方法返回值为布尔(bool)类型,true 为表达式有效,false 则为无效,常用方法如下:

1 //以下的代码为官方提供,放在这里可以参考 2 QRegularExpression invalidRe("(unmatched|parenthesis"); 3 if (!invalidRe.isValid())

二、正则表达式的匹配比较

QRegularExpression 类的正则匹配需要两个类来配合完成,这两个类就是之前提到的 QRegularExpressionMatch 类与 QRegularExpressionMatchIterator 类,前者提供单一匹配机制,一般多用于比较与单一数据提取,后者提供多重匹配机制,一般多用于多重数据提取

1)QRegularExpression 类与 QRegularExpressionMatch 类搭配使用,提供单一匹配比较,使用方法如下:

1 //以下的代码为官方提供,放在这里可以参考 2 QRegularExpression re("\\d\\d \\w+"); 3 QRegularExpressionMatch match = re.match("abc123 def"); 4 bool hasMatch = match.hasMatch(); // true

2)QRegularExpression 类与 QRegularExpressionMatch 类搭配使用,提供单一匹配比较与数据提取(多组数据时,可指定数据组数),使用方法如下:

1 //以下的代码为官方提供,放在这里可以参考 2 //1.通过QRegularExpression 类 match 方法(第二个参数未填,默认提取第一组数据),比较并提取第一组数据 3 QRegularExpression re("\\d\\d \\w+"); 4 QRegularExpressionMatch match = re.match("abc123 def"); 5 if (match.hasMatch()) 9 10 //2.通过QRegularExpression 类 match 方法的第二个参数进行数据偏移,比较并提取第N组数据(经测试,该方法不可靠,不过也许是我使用的方式方法不对造成的) 11 QRegularExpression re("\\d\\d \\w+"); 12 QRegularExpressionMatch match = re.match("12 abc 45 def", 1); 13 if (match.hasMatch())

3)QRegularExpression 类与 QRegularExpressionMatch 类搭配使用,提供单一匹配比较与数据提取的同时,也提供了数据分段提取方法,使用方式如下:

1 //以下的代码为官方提供,放在这里可以参考 2 //1.通过小括号分隔数据,然后通过地址偏移提取这组数据中不同的数据段 3 QRegularExpression re("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$"); 4 QRegularExpressionMatch match = re.match("08/12/1985"); 5 if (match.hasMatch()) 11 12 //2.通过小括号分隔数据,然后通过 `?<数据段名称>` 来指定每隔数据段的名称,然后通过 QRegularExpressionMatch 类的 captured 方法与数据段段名称直接定位数据段提取数据 13 QRegularExpression re("^(?<date>\\d\\d)/(?<month>\\d\\d)/(?<year>\\d\\d\\d\\d)$"); 14 QRegularExpressionMatch match = re.match("08/12/1985"); 15 if (match.hasMatch())

4)QRegularExpression 类与 QRegularExpressionMatch 类搭配使用,提供单一匹配比较与数据提取的同时,还提供了每组数据的起始位置与结束位置,使用方式如下:

1 //以下的代码为官方提供,放在这里可以参考 2 QRegularExpression re("abc(\\d+)def"); 3 QRegularExpressionMatch match = re.match("XYZabc123defXYZ"); 4 if (match.hasMatch())

5)QRegularExpression 类与 QRegularExpressionMatchIterator 类搭配使用,提供多重匹配比较与数据提取,使用方法如下:

1 //以下的代码为官方提供,放在这里可以参考 2 QRegularExpression re("(\\w+)"); 3 QRegularExpressionMatchIterator i = re.globalMatch("the quick fox"); 4 QStringList words; 5 while (i.hasNext()) 10 // words contains "the", "quick", "fox"



上一篇:三菱 PLC FX2N 输入输出如何接线
下一篇:Qt QTableView设置自适应行高、列宽、行样式
Qt
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素