首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 中的字符串模糊匹配:fnmatch 實戰

     編輯:關於C++

需求場景

准入授權配置採用 company|product|sys 格式,支持通配符 *:

  • sina|weibo|pusher 精確匹配
  • sina|*|pusher 匹配該公司所有產品的 pusher
  • *|*|pusher 匹配所有公司所有產品的 pusher

方案選擇

避免手寫 strchr 解析,直接使用 POSIX fnmatch(<fnmatch.h>)。

代碼實現

#include <iostream>
#include <fnmatch.h>
#include <vector>
using namespace std;

int main() {
    const char* origin = "sina|weibo|pusher";
    char patterns[][20] = {
        "sina|*|pusher", "sina|*|*", "*|weibo|*",
        "sina|pic|*", "*|*|sign", "*|weibo|sign",
        "*|pic|sign", "sina|pic|sign", "*|*|*"
    };
    vector<char*> vec;
    for (auto &p : patterns) vec.push_back(p);

    for (auto pat : vec) {
        int ret = fnmatch(pat, origin, FNM_PATHNAME);
        if (ret == FNM_NOMATCH)
            cout << "failed [" << pat << "]" << endl;
        else
            cout << "matched [" << pat << "]" << endl;
    }
}

性能測試

100 萬次匹配耗時 2.1 秒,平均 2μs/次,滿足高性能需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved