2014-01-12 4 views
1

정규식 패턴을 사용하여 파일을 검색하려고합니다.PHP 정규 표현식 file_exist

디렉토리 경로는 다음과 같습니다

$css_dir = MY_PLUGIN_DIR.'/source/css/'; 

CSS의 파일 이름으로 시작 :

$css_prefix = 'hap_css_'; 

과 함께 끝 : 그 사이에 알 수없는 문자의 일부 금액으로

'.css' 

.

변수로 정규식 패턴을 만드는 법을 알지 못하고 정규식으로 파일을 구성하는 방법을 알고 있습니다.

감사합니다.

+0

'hap_css _. +? \. css'를 사용하지 않는 이유는 무엇입니까? – tenub

+0

할 수는 있지만 정규식을 사용하여 file_exist를 생성해야합니다. – Toniq

답변

2

당신은 glob() 사용할 수 있습니다

$files = glob($css_dir . $css_prefix . '*.css'); 

을하지만, 당신은 더 복잡한 필터링을 위해 자신의 DirectoryIterator 기반 솔루션을 출시 할 :

$dir = new DirectoryIterator($css_dir); 
$pattern = '/^' . preg_quote($css_prefix) . '.+\\.css$' . '/'; 
foreach ($dir as $fileInfo) { 
    if (preg_match($pattern, $fileInfo->getBaseName())) { 
    // match! 
    } 
} 

(하나는 또한 RegexIterator 통합 할 수 있습니다) :

scandir()의 사용도 가능합니다.

$pattern = '/^' . preq_quote($css_prefix) . '.+\\.css$' . '/'; 

$files = array_filter(scandir($css_dir), function ($filename) { 
    return preg_match($pattern, $filename); 
}); 
+0

glob를 사용하여 여러 파일을 검색 할 수 있습니까? – Toniq

+0

@Toniq 네, 할 수 있습니다. [documentation] (http://php.net/glob)은 "일치하는 파일/디렉토리를 포함하는 배열을 반환합니다. 일치하는 파일이 없거나 오류가 발생하면 FALSE를 반환합니다." – ComFreek

+0

은'preg_quote'가 아니라'preq_quote'이어야합니다. –