【发布时间】:2010-10-09 21:26:17
【问题描述】:
如何调整搜索树以处理有限的正则表达式?
给定一个文件名,我需要找到与该文件名匹配的所有节点。节点可能包含通常的文件名 glob(* 和?)。由于这是一棵搜索树,因此速度至关重要。
我应该补充一点,速度最重要的情况是排除匹配的平均时间。在大多数情况下,匹配会失败。
如果树包含以下节点:
foo, bar, foo*, *bar, foo?bar
- 搜索“foo”将返回节点 1 和 3。
- 搜索“bar”将返回节点 2 和 4。
- 搜索“fob”不会返回任何节点。
- 搜索“fooxbar”将返回节点 5。
- 搜索“foobar”将返回节点 3 和 4。
【问题讨论】:
-
这是(正则表达式的)反向问题:匹配字符串是否属于正则语言?
-
你能给我们一个样本 i/o 吗?
-
一个例子:假设树包含以下节点:foo, bar, foo*, *bar, foo?bar 给定任何字符串(例如 foo, foobar, fooxbar, fob 等),快速找到与该字符串匹配的节点(如果有)。
-
您应该将示例添加到问题中,而不是评论中。此外,尽可能清晰有助于回答者。
-
我已经使用了一些实现来做到这一点,基于 AC 和 DFA 和 NFA。