【发布时间】:2009-03-05 00:28:09
【问题描述】:
我正在尝试构建一个高效的字符串匹配算法。这将在大容量环境中执行,因此性能至关重要。
这是我的要求:
- 给定一个域名,即 www.example.com,确定它是否与条目列表中的一个“匹配”。
- 条目可能是绝对匹配,即 www.example.com。
- 条目可能包含通配符,例如 *.example.com。
- 通配符条目从最定义的级别开始匹配。例如,*.example.com 将匹配 www.example.com、example.com 和 sub.www.example.com。
- 未嵌入通配符条目,即 sub.*.example.com 不会成为条目。
语言/环境:C# (.Net Framework 3.5)
我考虑过将条目(和域查找)拆分为数组,颠倒顺序,然后遍历数组。虽然准确,但感觉很慢。
我考虑过正则表达式,但担心将条目列表准确地表示为正则表达式。
我的问题:根据上面列出的描述,查找一个以域名形式存在的字符串是否与字符串列表中的任何一个匹配的有效方法是什么?
【问题讨论】:
-
问题是? / 顺便说一句,我会使用正则表达式,只需确保将表达式编译一次(而不是一次又一次地计算)。
-
“感觉慢”是什么意思?你真的测量过什么吗?
-
您希望搜索列表中有多少项目?所有这些项目都会在内存中吗?您是否考虑过使用数据库?
-
@Ed:慢是相对的。我正在尝试确定是否有更有效的方法使用字符串算法。
-
搜索列表将被加载到内存中。它相对不重要——成千上万的条目。