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");
原文链接:https://www.f2er.com/regex/363015.htmllibReference 中的结果为 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