我需要使用简单的通配符支持将输入字符串 (URL) 与一大组字符串规则(从 1k 到 250k 不等)进行匹配。
通配符支持的要求如下:
通配符 (*) 只能替换 URL 的“部分”。那是域、路径和参数的片段。例如,“*.part.part/*/part?part=part&part=*”。此规则的唯一例外是在路径区域中,“/*”应该匹配斜杠之后的任何内容。
例子:
- *.site.com/* -- 应该匹配 sub.site.com/home.html, sub2.site.com/path/home.html
- sub.site.*/path/* -- 应该匹配 sub.site.com/path/home.html、sub.site.net/path/home.html,但不匹配 sub.site.com/home.html
其他要求:
- 快速查找(我意识到“快速”是一个相对术语。考虑到最大 250k 规则,如果可能的话,仍然在 < 1.5s 内。)
- 在现代桌面范围内工作(例如,不是服务器实现)
- 给定输入字符串返回 0:n 匹配的能力
- 比赛将附加规则数据
诸如此类任务的最佳系统/算法是什么?我将使用 C++ 开发解决方案,并将规则本身存储在 SQLite 数据库中。