最具体的匹配通配符路径

时间:2011-08-22 09:15:05

标签: string language-agnostic path pattern-matching

给出类Unix路径的资源结构:

e.g。

/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 /)

模式中的所有其他字符都是文字,为简单起见,只有字符

  

A-Z,a-z,0-9,/和。

路径中允许

鉴于上述结构:

我是否正确假设所有匹配模式,最具体的匹配始终按字母顺序排列?

示例:

路径:

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

匹配模式(按字母顺序排列):

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

更新:好的,这是我对“最具体”的定义

如果

a比b更具体

  1. a的非通配符前缀比b
  2. 的非通配符前缀长
  3. 在相同的偏移处给出两个通配符,*比**
  4. 更具体

1 个答案:

答案 0 :(得分:2)

严格地说,由于/*不是字母,因此您没有按字母顺序排序,因此它将是字典排序。您似乎已经假设*&lt; [a-zA-Z0-9./]这很重要。对这些模式进行排序将满足非通配符前缀具有最大长度的第一个条件。但是,排序只会确保在第一个不相等的情况下*使用**;所有剩余的通配符都与排序无关。这可能是个问题。考虑以下两种模式:

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

他们是有序的,但我认为第一个实际上更具体。