Qt中使用正则表达式返回匹配的所有结果集

前端之家收集整理的这篇文章主要介绍了Qt中使用正则表达式返回匹配的所有结果集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Python的正则中有findAll函数返回一个所有匹配的结果list.

今天在使用Qt的时候发现似乎没有类似的方法.进而自己写了一个,代码如下

/**
 * @brief 获取所有的匹配结果
 * @param text 要匹配的文本
 ** @param regexp 正则表达式串
 * @return 匹配的结果集
 */
QSet<QString> UploadBase::getAllMatchResults(const QString text, const QString regexp)
{
    QSet<QString> resultSet;
 
    QRegExp rx(regexp);
    int pos = 0;
 
    while ((pos = rx.indexIn(text, pos)) != -1)
    {
        pos += rx.matchedLength();
        QString result = rx.cap(0);
        resultSet << result;
    }
 
    return resultSet;
}
 
测试:
假如在如下的test.h 要获取所有include的文件
//test.h
#include <Metro.h>
#include <FreeSixIMU.h>
#include <FIMU_ADXL345.h>
#include <FIMU_ITG3200.h>
#include <Wire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
 可以这么使用 
 
 
QSet<QString> libReference;
QFile file(filePath);//filePath是test.h的路径
if(!file.open(QFile::ReadOnly))
{
    qDebug() << file.errorString();
    return libReference;// return a empty object
}
 
QString code = file.readAll();
 
libReference = getAllMatchResults(code, "\\w+\\.h");
 
libReference 中的结果为 Metro.h,FreeSixIMU.h,FIMU_ADXL345.h,sans-serif">FIMU_ITG3200.h,sans-serif">Wire.h,sans-serif">LiquidCrystal_I2C.h,sans-serif">IRremote.h
原文链接:https://www.f2er.com/regex/363015.html

猜你在找的正则表达式相关文章