You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式匹配多个条目?Qt/C++实现方案问询

解决Qt中匹配多个hciX条目的正则表达式问题

1. 正确的正则表达式

用于匹配hci0、hci1这类字符串的正则表达式为:

hci\d

或者等价的写法:

hci[0-9]

正则符号说明

  • hci:字面匹配,精确匹配字符串中的"hci"字符序列
  • \d:数字匹配,等价于[0-9],匹配任意一个0到9的阿拉伯数字;[0-9]是显式定义的数字字符集合,和\d效果完全一致

2. Qt中获取所有匹配结果的正确方式

你之前的问题出在两个核心点:

  • Qt的QRegularExpression不支持在正则字符串末尾加/gm这类JS风格的修饰符,相关匹配规则需要通过类的选项参数设置
  • match()方法仅返回第一个匹配结果,要获取所有匹配项,必须使用globalMatch()方法

完整代码示例

#include <QRegularExpression>
#include <QRegularExpressionMatchIterator>
#include <QString>
#include <QDebug>

int main() {
    QString common_result = "Devices:\n\thci1\t00:50:B6:80:4D:5D\n\thci0\t00:15:83:15:A2:CB\n";
    
    // 构造正则表达式,C++中字符串里的反斜杠需要转义为双反斜杠
    QRegularExpression re("hci\\d");
    
    // 获取所有匹配的迭代器
    QRegularExpressionMatchIterator matches = re.globalMatch(common_result);
    
    // 遍历输出所有匹配结果
    while (matches.hasNext()) {
        QRegularExpressionMatch match = matches.next();
        qDebug() << match.captured(0);
    }
    
    return 0;
}

补充说明

  • 如果需要严格匹配每行开头的hciX条目(比如避免匹配字符串中间意外出现的hciX),可以开启多行模式并添加行锚点:
    QRegularExpression re("^\\thci\\d", QRegularExpression::MultilineOption);
    
    这里^在多行模式下匹配每行开头,\t匹配制表符,确保只匹配目标格式中的hci条目

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:08:27