Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP fnmatch() 함수 사용법 – 파일명 패턴 매칭 완벽 가이드

PHP의 fnmatch() 함수는 파일명 또는 문자열이 지정된 패턴과 일치하는지 검사하는 함수입니다. 셸에서 사용되는 와일드카드(wildcard) 방식의 패턴 매칭을 지원하며, 주로 특정 확장자나 이름 규칙을 가진 파일을 필터링할 때 유용하게 활용됩니다.

문법(Syntax)

fnmatch(pattern, string, flags)

매개변수(Parameters)

  • pattern − 비교에 사용할 검색 패턴입니다. *, ?, [abc] 같은 와일드카드 문자를 포함할 수 있습니다.

  • string − 패턴과 일치하는지 검사할 대상 문자열(파일명)입니다.

  • flags − 매칭 동작을 조정하는 선택적 옵션으로, 아래 값 중 하나를 지정할 수 있습니다.

    • FNM_NOESCAPE − 백슬래시(\)를 이용한 이스케이프 처리를 비활성화합니다.

    • FNM_PATHNAME − 문자열 내 슬래시(/)는 오직 패턴의 슬래시와만 일치하도록 제한합니다. 디렉터리 경로를 다룰 때 유용합니다.

    • FNM_PERIOD − 문자열 맨 앞의 마침표(.)는 반드시 패턴의 마침표와 정확히 일치해야 합니다. 숨김 파일(.htaccess 등) 처리 시 사용됩니다.

반환값(Return)

패턴과 문자열이 일치하면 TRUE를 반환하고, 일치하지 않으면 FALSE를 반환합니다.

예제(Example)

다음은 와일드카드 패턴을 활용한 기본 예제입니다.

<?php
   $file = "organization.txt";
   if (fnmatch("*organi[zs]ation", $file)) {
      echo "Found!";
   } else {
      echo "Not found!";
   }
?>

실행 결과(Output)

Not found!

결과 해설

위 예제에서 패턴 *organi[zs]ation은 "organization" 또는 "organisation"으로 끝나는 문자열과 일치합니다. 그러나 대상 문자열인 organization.txt는 뒤에 .txt라는 확장자가 붙어 있어 패턴의 끝 부분과 정확히 일치하지 않기 때문에 "Not found!"가 출력됩니다.

확장자까지 포함해서 매칭하고 싶다면 패턴 끝에 *를 추가하면 됩니다.

<?php
   $file = "organization.txt";
   if (fnmatch("*organi[zs]ation*", $file)) {
      echo "Found!"; // Found! 출력
   } else {
      echo "Not found!";
   }
?>

참고 사항

  • fnmatch() 함수는 POSIX 시스템에서는 항상 사용 가능하지만, Windows 환경에서도 PHP 5.3.0부터 사용할 수 있습니다.

  • 디렉터리 내 파일 목록을 필터링할 때 glob() 함수와 함께 자주 비교되며, glob()은 파일 목록 자체를 반환하는 반면 fnmatch()는 단순히 일치 여부만 판단한다는 차이가 있습니다.