2012-09-15 1 views
1

경로를 일치시킬 최적의 방법이 필요합니다. 가능한 기본 경로의 거대한 목록 (많은 디렉토리 레벨 업). 기본 경로 자체는 유효한 쉘 글 로브 경로 일 수있다.경로가 기본 경로 목록 (기본 경로가있는 사용자)의 하위 디렉토리 또는 파일 인 경우 perl을 체크인하는 방법

예.

내가 경로 아래 목록에서 /a/b-12/c/d/e/fg/hi/94.txt 일치해야합니다

  1. /A/B - */E
  2. /X/Y *
  3. /X/{A, B,이야 *} E
  4. /A/{A, B 형 * C} 2/C/D
  5. /A/B */c/e
  6. ...

목록이 길며 길이 10K 개입니다. 가능한 부모 경로를 확인한 후에는 경로 등으로 chdir/cd로 확인할 수 있습니다.

목록에서 정규식 일치를 원하지만 쉘 globbed 경로가 일치하기 어렵습니다. 이 문제를 해결할 수있는 Perl 모듈이 있습니까?

감사합니다.

답변

1

CPAN의 Text::Glob을 사용해보십시오. 당신은 내가 그냥 놀고 있었는데, glob_to_regex을 사용 해달라고하지만,이 일치 :

#!/usr/bin/env perl 
use strict; 
use warnings; 
use Text::Glob qw(glob_to_regex); 

my @arr = ('/a/b-12/c/d/e/fg/hi/94.txt'); 

my $regex = glob_to_regex('/a/{a,b*,c}2/c/d/e/fg/hi/94.txt'); 
print "REGEX: $regex\n"; 
if ($arr[0] =~ m/$regex/) { 
    print "Matches\n"; 
} 
+0

'가// {A, B *를, C} 2/C/d'는 글로브 패턴 – sapht

+0

감사해야한다 너는 도움이된다! – testytest