주어진 정규식 (PCRE)과 일치하는 경로의 파일을 검색하는 프로그램에서 최적화 문제가 있습니다. 일반적인 표현 될 수있다 : 문자열을 일반 표현식과 일치하도록 패딩 할 수 있습니까?
^C:\test\(a|b)\foo\bar
^C:\test\[^\\]+\foo
^C:\test\.*\foo
는 현재 구현은 상수 접두사 경로 ("C : \ 테스트 \")을 감지 만이 디렉토리를 열거하고 모든 경로 이름에 정규식을 적용합니다.
첫 번째 예제를 보면 C : \ test \에 100 만 개의 파일이 들어있는 폴더 "c"가있을 수 있습니다. 이들 중 어느 것도 정규 표현식과 일치 할 수는 없지만 여전히 열거되어 있습니다. 따라서 디렉토리를 열거하기 전에 정규식과 일치하도록 경로에 무언가를 추가하는 것이 가능한지 확인하고 싶습니다.
일반적으로 말하기 : 지정된 정규 표현식과 일치하도록 주어진 문자열을 하나 이상의 접미어로 연결할 수 있는지 여부를 결정할 수 있습니까?
세 번째 예제와 같은 경우는 최적화가 불가능하지만 많은 경우 실행 시간이 많이 절약됩니다.
아이디어가 있으십니까?
나는 @tvanfosson에 동의한다. 불필요한 디렉토리 나열을 방지하기 위해 내려갈 때 디렉토리 항목을 점검해야합니다. 예를 들어,'C : \ test'에서, 그 디렉토리의 자식들만 검사합니다. 일치하는 항목이 하위 디렉토리 인 경우 하위 항목으로 내려 가서 하위 항목에 대해 다음 정규 표현식을 실행하는 식으로 진행할 수 있습니다. –