Наиболее конкретный совпадающий путь подстановочных знаков - PullRequest
2 голосов
/ 22 августа 2011

Учитывая структуру ресурса Unix-подобных путей:

например,

/foo/bar/baz/phleem/abc.txt

и набор шаблонов шаблонов в стиле муравья:

*  matches zero or more characters excluding /
** matches zero or more full sub-paths (may not be preceded or followed
   by anything other than /)

Все остальныесимволы в шаблонах являются литералами, и для простоты в путях допускаются только символы

AZ, az, 0-9 и / и.

.*

Учитывая приведенную выше структуру:

Правильно ли я предположил, что из всех совпадающих шаблонов наиболее конкретное совпадение всегда в алфавитном порядке?

Пример:

Путь:

/foo/bar/baz/phleem/abc.txt

Соответствие шаблонам (в алфавитном порядке):

**               < least specific
**/*.txt
**/phleem/*.txt
/foo/**/abc.txt  < most specific

Обновление: ОК, вот мое определение "наиболее конкретного"

a является более конкретным, чем b, если

  1. префикс без подстановочного знака a длиннее, чем у b
  2. , учитывая два подстановочных знака с одинаковым соответствующим смещением, * более конкретенчем **

1 Ответ

2 голосов
/ 25 августа 2011

Строго говоря, вы не делаете алфавитный порядок, поскольку / и * не являются буквами, так что это будет лексикографический порядок. Похоже, вы уже предполагаете * <<code>[a-zA-Z0-9./], что важно. Упорядочение шаблонов как таковых удовлетворит ваше первое условие, что префикс без подстановочных знаков имеет максимальную длину. Тем не менее, порядок будет гарантировать, что * используется более чем ** в первом неравном случае; все оставшиеся подстановочные знаки становятся несоответствующими порядку. Это может быть проблемой. Рассмотрим следующие два шаблона:

/**/*.txt
/*/**

Они заказаны, но я бы сказал, что первое на самом деле более конкретно.

...