我需要通过仅检查/比较表达式来比较文件系统通配符表达式以查看它们的结果是否重叠.
为了便于举例,我们正在构建一个实用程序,它可以根据文件系统通配符表达式将文件从一个(或多个位置)排序到单独的文件夹中.例如:*.txt进入文件夹a,*.doc进入文件夹b,依此类推.我们支持的通配符是*和?
我希望能够通过分析通配符表达式确定它们是否会冲突/重叠.
例如,如果我有以下表达式:
*.x.y *.y
它们会冲突(重叠),因为第二个表达式*.y将包含*.xy结果.(例如Axy会匹配两个表达式)
我正在通过使用所有表达式构建树结构来接近这一点,认为如果表达式冲突,构建树的行为将失败.
For example:
*.x
a.b
a.c
b.d
might create a tree like
+-*-.-x
|
start +--+
| +-b
| |
+-a-.-+-c
|
|
+-b-.-d
如果我尝试添加模式bx,则树将在*.x路径后成功,从而表示模式已存在.
我正朝着正确的方向前进吗?或者是否有一种已知的攻击方法?