Мне нужно сравнить подстановочные выражения файловой системы, чтобы увидеть, будут ли их результаты перекрываться, только анализируя/сравнивая выражения.
Для примера мы создаем утилиту, которая будет сортировать файлы из одного (или нескольких местоположений) в отдельные папки на основе подстановочных выражений файловой системы. Например: *.txt переходит в папку a, *.doc переходит в папку b и т.д. Подстановочные символы, которые мы поддерживали бы, были бы * и?
Я хочу, чтобы иметь возможность определять, просто анализируя выражения подстановочных знаков, будут ли они конфликтуют/перекрываются.
Например, если у меня есть следующие выражения:
*.x.y *.y
Они конфликтуют (перекрываются), потому что второе выражение *.y будет включать *.x.y результаты. (например, A.x.y будет соответствовать обоим выражениям)
Я приближаюсь к этому, создавая древовидную структуру с использованием всех выражений, считая, что сам процесс построения дерева не сработает, если конфликты конфликтуют.
For example: *.x a.b a.c b.d might create a tree like +-*-.-x | start +--+ | +-b | | +-a-.-+-c | | +-b-.-d
Если я попытаюсь добавить шаблон b.x, дерево будет успешным по пути *.x и тем самым скажет, что шаблон уже существует.
Я направляюсь в правильном направлении? Или есть ли известный алгоритм для атаки этого?