⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨🎓。
如果觉得本文能帮到您,麻烦点个赞👍呗!

近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️

qt sqlite模糊查找 qt 模糊匹配_开发语言


实现模糊查询

  • 0、知识点:
  • 1、 确定需求
  • 2、 定位需要修改的位置
  • 3、 正则化表达式的书写
  • 功能实现


0、知识点:
  • 正则化表达式的书写
  • 正则化表达式的应用
  • 模糊匹配中按照顺序进行匹配
  • 模糊匹配中遇到空格的处理
  • 模糊匹配算法的优化
  • 如何提高模糊查询的效率(QtConcurrent)
1、 确定需求

要实现模糊查询,您可以使用正则化表达式来匹配文件名。正则表达式可以匹配类似于通配符的模式,并可以通过捕获组提取有用的信息。

这个功能真是饶了太久了,一开始没弄清楚需求。

先说一下需求是这样的:

支持模糊匹配搜索,例如输入“wps”,能够搜到 “wps.exe”也能搜到 “windows powsershell.exe";

需要定位到需要修改的函数。

2、 定位需要修改的位置

on_findButton_clicked()这个槽函数中出发了查找按钮,在其中里面查找对应的函数。

// 文件名进行查找文件
    findRecursion(path, fileName.isEmpty() ? QStringLiteral("*") : fileName, &files);
    qDebug()<<"files Name"<<fileName<<"files"<<files<<endl;
    // 在已经查找出的文件进一步查找哪些包含了text
3、 正则化表达式的书写
QString filePattern = fileName.split("").join("\\S*\\s*");

findRecursion()函数进行修改。

void findRecursion(const QString& path, const QString& fileName, QStringList* result)
{
    QDir currentDir(path);
    const QString prefix = path + QLatin1Char('/');


    // 如果输入的文件名是 * ,则列出所有文件
    if (fileName == "*")
    {
        foreach (const QString& match, currentDir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot))
        {
            QString filePath = prefix + match;
            result->append(filePath);
        }
    }
    else
    {
        foreach (const QString& match, currentDir.entryList(QDir::Files | QDir::NoSymLinks))
        {
            QString filePath = prefix + match;
            // 将文件名拆分为字符,用\S*拼接后作为正则表达式匹配模式
            QString filePattern = fileName.split("").join("\\S*\\s*");
            QRegularExpression regex(filePattern, QRegularExpression::CaseInsensitiveOption);
            if (regex.match(match).hasMatch())
            {
                result->append(filePath);
            }
        }
        foreach (const QString& dir, currentDir.entryList(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot))
        {
            findRecursion(prefix + dir, fileName, result);
        }
    }
}

需要注意的地方是:

  1. 当文件名为*的时候,不需要进行额外的处理。
  2. 如果是文件名需要将其进行拆分以进行模糊查询,支持windows 可以通过wds查询到。想要实现在输入"wps"的情况下,能够搜索到包含"w", “p”, "s"三个字符且按照"wps"的顺序排列的文件名,可以对输入的文件名进行拆分,拆分成每个字符,然后将每个字符用\S*连接起来作为正则表达式的模式进行匹配。
  3. 最特别的一点是:windows powsershell.exe 这里有个空格,需要进行因此对空格进行处理。\\S*\\s*
功能实现

输入*查询一下 文件目录下的所有文件:

qt sqlite模糊查找 qt 模糊匹配_qt_02

输入WPS 进行模糊查询:

不过 需要注意的是微信这个中文的关键词 我们只做首字母匹配。

qt sqlite模糊查找 qt 模糊匹配_文件名_03

最后,最后
如果觉得有用,麻烦三连👍⭐️❤️支持一下呀,希望这篇文章可以帮到你,你的点赞是我持续更新的动力