2014-05-09 4 views
5

함수에서 파일 이름을 사용합니다. 다른 디렉토리에서이 파일과 비슷한 모든 파일을 파일 이름별로 반환하고 싶습니다. 나는 이것을 썼다 :glob 함수의 정규 표현식 패턴

$thumbDir = $this->files_path.'thumbs/'; 
    $toglob = $thumbDir.pathinfo($name, PATHINFO_FILENAME).'_[0-9]+\x[0-9]+_thb.'.pathinfo($name, PATHINFO_EXTENSION); 
    foreach (glob($toglob) as $key => $value) { 
     echo $value; 
    } 

그러나 그것은 작동하지 않는다. 이

답변

11

glob() 정말 준 정규식 엔진입니다 :) 누군가가 나를 도와 주면

oldFileName_[one or more digits]x[one or more digits]_thb.oldFileNameExtension 

나는 매우 감사하게 될 것입니다 : 나는 그들의 이름은 파일을 검색 할 수 있습니다. 워드 프로세서에 대한 코멘트에서, 그것은 ?* 수 있습니다 :

글로브는 메타 문자와 한정사 사이의 조화의 종류처럼 행동 두 가지 특수 기호를 사용합니다. 이 두 문자는 * 및?

? * 표시 A/

제외한 모든 문자의 1 일치 도움이된다면 A/

제외하고는 0 또는 문자의 자세한 내용을 일치.의 PCRE 동등한로 * 생각 * 및? 점의 PCRE의 동등 (.)

이것은 당신이 glob()에 표현 _[0-9]+\x[0-9]+_thb.을 사용할 수 없음을 의미합니다. 대신, 전체 디렉토리를 보면 그것이 preg_match()와 일치하는 경우 볼 수 있습니다

$glob = glob('/path/to/dir/*'); 
foreach($glob as $file) { 
    if(preg_match('/_\d+x\d+_thb\./', $file)) { 
     // Valid match 
     echo $file; 
    } 
} 

glob(/path/to/dir/*);에서 그 실현의 *이 일치하지 않는 / 때문에이 서브 디렉토리의 모든 파일을받지 않습니다. 해당 경로의 모든 파일과 디렉토리를 반복합니다. 더 깊게 가고 싶다면 재귀 함수를 만들어야합니다.

주 나는 청소 당신의 expression :

_\d+x\d+_thb\. 

\d 거의 동일 [0-9] (그것은 또한 등 아랍어 숫자 문자를 포함), 당신이 (그래서 \x를) x 탈출하지 할 필요가 없습니다, 당신이 원하는 기간 (\.)을 탈출하십시오.

+2

안녕하세요, 내 글램 댓글입니다. 내 하루가 만들어졌습니다, hoozah! :) –

+1

@CrayonViolent 하하, 내가 본 것 중 더 나은 PHP 문서 주석 중 하나였습니다 - 너무 많은 수의 upvotes도있었습니다. 이 질문을 우연히 만난다면 당신은 glob() 사용자 여야합니다;) – Sam

+0

응답 주셔서 감사합니다 :) – user3025978