Qt 正则表达式

Qt 正则表达式

正则表达式是一种用于匹配文本的强大工具,可以方便地提取出我们所需要的信息,Qt 提供了 QRegExp 类来支持正则表达式的使用。本文将介绍如何在 Qt 中使用正则表达式。

QRegExp 类

QRegExp 类是 Qt 中用于处理正则表达式的类,它的头文件为:

#include <QRegExp>

在 Qt 中使用 QRegExp 需要使用它的成员函数 setPattern() 设置正则表达式的模式,调用成员函数 indexIn() 查找文本中匹配该正则表达式模式的第一个位置的索引,如果没有匹配便返回 -1。如果找到了匹配的位置,可以使用成员函数 cap() 返回匹配的值。

QRegExp 类的用法如下:

QString str = "hello world";
QRegExp rx("hel");
int pos = rx.indexIn(str); // 查找匹配模式的第一个位置索引
if (pos >= 0) {
    qDebug() << rx.cap(0); // 输出匹配的值
}

结果输出为:

"hel"

在上面的代码中,我们定义了一个字符串 str 和一个匹配模式为 “hel” 的 QRegExp 对象 rx,调用了它的 indexIn() 函数查找了字符串中匹配该正则表达式模式的第一个位置的索引。由于找到了匹配的位置,我们便输出了匹配的值。

需要注意的是,cap() 函数返回值的索引从 0 开始,代表匹配的文本中第一个被捕获的子字符串。

正则表达式语法

在使用 QRegExp 前,我们需要先学习正则表达式语法。下面是一些常用的正则表达式语法:

元字符

元字符是正则表达式中具有特殊含义的字符,它们可以匹配特定的字符或者字符集。下面列出一些常用的元字符和它们所代表的意义:

元字符 描述
. 匹配除“行终止符”外的任意一个字符
* 匹配前面的子表达式 0 次或多次
+ 匹配前面的子表达式 1 次或多次
? 匹配前面的子表达式 0 次或 1 次
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
[] 匹配任意一个方括号中的字符
[ ^] 匹配除方括号中的任意一个字符以外的字符
() 将其中的内容视为一个整体
| 匹配其中之一
{ n} 匹配前面的子表达式恰好 n 次
{ n,} 匹配前面的子表达式至少 n 次
{ n,m} 匹配前面的子表达式至少 n 次,但不超过 m 次

限定符

限定符是用于描述可重复次数的元字符。下面列出一些常用的限定符:

限定符 描述
* 匹配前面的子表达式 0 次或多次
+ 匹配前面的子表达式 1 次或多次
? 匹配前面的子表达式 0 次或 1 次
{ n} 匹配前面的子表达式恰好 n 次
{ n,} 匹配前面的子表达式至少 n 次
{ n,m} 匹配前面的子表达式至少 n 次,但不超过 m 次

特殊字符

下面列出一些常用的特殊字符:

特殊字符 描述
\ 转义字符,用于匹配元字符本身
\d 匹配数字字符
\D 匹配非数字字符
\s 匹配空白字符
\S 匹配非空白字符
\w 匹配字母、数字、下划线
\W 匹配除字母、数字、下划线以外的字符

匹配模式

匹配模式指的是一组用于控制正则表达式匹配行为的标志。下面列出一些常用的匹配模式:

匹配模式 描述
Qt::CaseInsensitive 忽略大小写
Qt::Multiline 多行匹配
Qt::DotMatchesEverything 可以匹配任何字符,包括换行符
Qt::MatchExactly 完全匹配
Qt::MatchContains 包含匹配
Qt::MatchStartsWith 以指定字符串开头
Qt::MatchEndsWith 以指定字符串结束
Qt::MatchRegExp 使用正则表达式匹配

示例代码

下面是一些使用 QRegExp 进行正则表达式匹配的示例代码:

匹配手机号码

QString str = "My phone number is: 18888888888";
QRegExp rx("\\d{11}"); // 利用元字符 \d 和限定符 {11} 来匹配手机号码
int pos = rx.indexIn(str);
if (pos >= 0) {
    qDebug() << rx.cap(0);
}

结果输出为:

"18888888888"

匹配电子邮件地址

QString str = "My email address is: example@example.com";
QRegExp rx("\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b"); // 通过正则表达式来匹配电子邮件地址
int pos = rx.indexIn(str);
if (pos >= 0) {
    qDebug() << rx.cap(0);
}

结果输出为:

"example@example.com"

匹配 HTML 标签

QString str = "<head><title>Qt 正则表达式</title></head>";
QRegExp rx("<[^>]*>"); // 通过正则表达式来匹配 HTML 标签
int pos = 0;
while ((pos = rx.indexIn(str, pos)) != -1) {
    qDebug() << rx.cap(0);
    pos += rx.matchedLength();
}

结果输出为:

"<head>"
"<title>"
"</title>"
"</head>"

在上面的代码中,我们使用正则表达式 <[^>]*> 匹配 HTML 标签,其中元字符 [^>] 表示匹配除了 > 之外的所有字符。

结论

本文介绍了如何在 Qt 中使用 QRegExp 类来进行正则表达式匹配,并且列出了一些常用的正则表达式语法以及匹配模式。以上是一些常见的应用场景,实际上正则表达式还可以用于更多的场合,在实际开发中我们可以根据需要自行调整匹配模式和正则表达式。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程