【Qt】使用正则表达式,从输入字符串中提取所有符合特定始、末符号的字符串。
文章目录
- 前言
- 1. 简介
- 先看函数原型
- 解释
- 头文件
- 2. 实现
前言
本文代码测试环境:
编程语言 | 构建套件 | IDE | 操作系统 |
---|---|---|---|
C++ 11 | Desktop Qt 5.9.9 MSVC2017 64bit | Qt Creator 4.11.0 | Windows10 |
1. 简介
先看函数原型
/**
* @brief ExtractString 提取特定范围内的字符串,结果使用引用返回
* @param qstrInPut 原字符串
* @param qcStartChar 开始符号
* @param qcEndChar 结束符号
* @param qvOutPut 所有符合条件的字符串容器
* @return 成功返回 0,失败返回 1
*/
int ExtractString(const QString &qstrInPut, const QChar &qcStartChar, const QChar &qcEndChar, QVector<QString> &qvOutPut);
解释
本篇博客提供一个方法,从输入的字符串中提取所有符合特定始、末符号的字符串。(就是个轮子,直接用即可。)
这句话有点绕。直接举例:
样例1:"shfldsjfk<String001>safdsf<String001>%&*^^*"
样例2:"....(Valid characters)......$#&*^*&^#$^%$^*"
对于样例1,如果想提取“String001”和“String002”,形参
qcStartChar
qcEndChar
分别传入<
>
符号即可;
对于样例1,如果想提取“Valid characters”,形参qcStartChar
qcEndChar
分别传入(
)
符号即可。输入字符串中其余的干扰字符会自动摒弃。
头文件
#include <QRegularExpression>
2. 实现
int ExtractString(const QString &qstrInPut, const QChar &qcStartChar, const QChar &qcEndChar, QVector<QString> &qvOutPut)
{
// 清空输出容器
qvOutPut.clear();
// 检查输入字符串是否为空
if (qstrInPut.isEmpty()) {
return 1; // 失败返回 1
}
// 构建正则表达式字符串
QString regexStr = QRegularExpression::escape(qcStartChar) + "(.*?)" + QRegularExpression::escape(qcEndChar);
// 创建正则表达式对象
QRegularExpression regex(regexStr);
// 检查正则表达式是否有效
if (!regex.isValid()) {
return 1; // 失败返回 1
}
// 获取所有匹配的迭代器
QRegularExpressionMatchIterator it = regex.globalMatch(qstrInPut);
// 遍历所有匹配项
while (it.hasNext()) {
QRegularExpressionMatch match = it.next();
// 将匹配的尖括号内的内容添加到结果列表
qvOutPut.append(match.captured(1));
}
return 0; // 成功返回 0
}