前言
本文代码测试环境:
| 编程语言 | 构建套件 | IDE | 操作系统 |
|---|---|---|---|
| C++ 11 | Desktop Qt 5.9.9 MSVC2017 64bit | Qt Creator 4.11.0 | Windows10 |
1. 简介
概要
本篇博客提供一个方法,从输入的字符串中提取所有或第一个符合特定始、末符号的字符串。(就是个轮子,直接用即可。)
这句话有点绕。直接举例:
样例1:"xxsfxxfldsjfk<Example string one>ssxxsdgsdg<Example string two>%&*^^*"
样例2:"....(Example string)......$#&*^*&^#$^%$^*"
对于样例1,如果想提取
“Example string one”和“Example string two”,形参qcStartCharqcEndChar分别传入<>符号即可;
对于样例2,如果想提取“Example string”,形参qcStartCharqcEndChar分别传入()符号即可。如果你只想从输入字符串中提取第一个符合特定始、末符号的字符串,本篇博客也提供了一种重载方法,具体请继续往下看。
注:输入字符串中其余的干扰字符会自动摒弃。
先看函数原型
/**
* @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);
/**
* @brief ExtractString ExtractString函数的重载
*/
int ExtractString(const QString &qstrInPut, const QChar &qcStartChar, const QChar &qcEndChar, QString &qstrOutPut);
头文件
#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
}
从输入字符串中,提取第一个符合始、末符号的字符串
int CReadCfgData::ExtractString(const QString &qstrInPut, const QChar &qcStartChar, const QChar &qcEndChar, QString &qstrOutPut)
{
// 清空输出字符串
qstrOutPut.clear();
// 检查输入字符串是否为空
if (qstrInPut.isEmpty()) {
return 1; // 失败返回 1
}
// 构建正则表达式字符串
QString regexStr = QRegularExpression::escape(qcStartChar) + "(.*?)" + QRegularExpression::escape(qcEndChar);
// 创建正则表达式对象
QRegularExpression regex(regexStr);
// 检查正则表达式是否有效
if (!regex.isValid()) {
return 1; // 失败返回 1
}
// 获取第一个匹配项
QRegularExpressionMatch match = regex.match(qstrInPut);
// 如果找到匹配项
if (match.hasMatch()) {
// 将匹配的尖括号内的内容赋值给输出字符串
qstrOutPut = match.captured(1);
} else {
return 1; // 没有找到匹配项,失败返回 1
}
return 0; // 成功返回 0
}
1020

被折叠的 条评论
为什么被折叠?



