Qt 正则表达式提取文件中的 USB 设备 ID
flyfish
文档内容
Bus: 001 Device: 001 Description: 1d6b:0002 Linux Foundation 2.0 root hub
Bus: 002 Device: 003 Description: 0e0f:0002 , Inc. USB Hub
Bus: 002 Device: 002 Description: 0e0f:0003 , Inc. Mouse
Bus: 002 Device: 001 Description: 1d6b:0001 Linux Foundation 1.1 root hub
代码
#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QStringList>
#include <QRegularExpression>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 默认文件路径
QString defaultFilePath = "./usb_devices.txt";
// 从命令行参数中获取文件路径
QString filePath = (argc > 1) ? QString::fromLocal8Bit(argv[1]) : defaultFilePath;
// 打开文件
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qCritical() << "无法打开文件:" << filePath;
return 1;
}
// 读取文件内容
QTextStream in(&file);
QString content = in.readAll();
file.close();
// 使用正则表达式匹配 USB 设备的 ID
QRegularExpression regex("Description:\\s*([0-9a-fA-F]{4}:[0-9a-fA-F]{4})");
QRegularExpressionMatchIterator i = regex.globalMatch(content);
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
QString id = match.captured(1);
qDebug() << "USB 设备 ID:" << id;
}
return 0;
}
结果
USB 设备 ID: "1d6b:0002"
USB 设备 ID: "0e0f:0002"
USB 设备 ID: "0e0f:0003"
USB 设备 ID: "1d6b:0001"