2011-08-22 4 views
2

유닉스와 유사한 경로의 자원 구조가 주어진 경우 :가장 구체적인 일치하는 와일드 카드 경로

/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 

업데이트 : OK, 여기에 "가장 구체적인"내 정의

입니다

a는 b보다 구체적입니다.

  1. a의 비 와일드 카드 접두사는 더 이상 B의보다
  2. 두 개의 와일드 카드를 부여 같은, * 당신이 일을하지 않을 말하기 엄밀히
+1

'**/phleem/*. txt'가 "덜 구체적인"다음에'/ foo/**/abc.txt'라고 생각하는 이유는 명확하지 않습니다. 두 경로 세트가 각각 일치하고 둘 중 하나가 다른 경로에 포함되지 않습니다. –

+0

@ n.m. 당신 말이 맞아요, 저는 곧 그것에 대해 자세히 설명 할 것입니다. 감사합니다 –

+0

특이성이 와일드 카드 수의 함수가 아니어야합니까? 나는 **> *에 동의 할 수 있지만 당신은 또한 그것을 * *> * 포함시켜야한다고 생각한다. 비 와일드 카드 접두어 길이 조건은 다소 인공적인 것처럼 보입니다./foo/bar/a * n * y * t * h * i * n * g가 foo/*/anything보다 구체적 인 이유는 무엇입니까? – tripleee

답변

2

**보다 더 구체적이고 각각의 오프셋 (offset) /* 이후의 알파벳 순서는 문자가 아니므로 사전적인 순서가됩니다. 중요한 것은 이미 * < [a-zA-Z0-9./]이라고 가정합니다. 패턴을 순서대로 지정하면 비 와일드 카드 접두어의 길이가 최대가되는 첫 x 째 조건을 충족시킵니다. 그러나 주문은 **보다 첫 번째가 아닌 동등한 경우에만 *이 사용되도록합니다. 나머지 모든 와일드 카드는 주문과 관련이 없습니다. 이것은 문제가 될 수 있습니다. 다음과 같은 두 가지 패턴을 고려하십시오.

그들은 주문되었지만 실제로는 더 구체적이라고 주장합니다.

+0

사람들은 "사전 적"을 사용하여 무엇이든간에 완전히 상반되는 주문을 의미하는 이상한 이야기다. * 사전 편집자는 사전이나 전화 번호부 항목을 주문할 때 사용합니다. 숫자 코드 점 순서는 알파벳/사전/사전 편찬가의 순서와는 아무런 관련이 없습니다. 실제로 꽤 많은 쓰레기입니다. – tchrist

+0

@Kevin 나는 ASCII 문자셋의 순서면에서 알파벳 순서를 엄격하게 정의한다. 당신 말이 맞습니다. 특별한 경우가 발생하지는 않을지라도, 나의 가정은 깨질 것입니다. 감사. –