如何用正则表达式匹配多个条目?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
相关产品推荐
相关产品推荐

