2013-07-06 1 views
1

주어진 정규식 (PCRE)과 일치하는 경로의 파일을 검색하는 프로그램에서 최적화 문제가 있습니다. 일반적인 표현 될 수있다 : 문자열을 일반 표현식과 일치하도록 패딩 할 수 있습니까?

^C:\test\(a|b)\foo\bar 
^C:\test\[^\\]+\foo 
^C:\test\.*\foo 

는 현재 구현은 상수 접두사 경로 ("C : \ 테스트 \")을 감지 만이 디렉토리를 열거하고 모든 경로 이름에 정규식을 적용합니다.

첫 번째 예제를 보면 C : \ test \에 100 만 개의 파일이 들어있는 폴더 "c"가있을 수 있습니다. 이들 중 어느 것도 정규 표현식과 일치 할 수는 없지만 여전히 열거되어 있습니다. 따라서 디렉토리를 열거하기 전에 정규식과 일치하도록 경로에 무언가를 추가하는 것이 가능한지 확인하고 싶습니다.

일반적으로 말하기 : 지정된 정규 표현식과 일치하도록 주어진 문자열을 하나 이상의 접미어로 연결할 수 있는지 여부를 결정할 수 있습니까?

세 번째 예제와 같은 경우는 최적화가 불가능하지만 많은 경우 실행 시간이 많이 절약됩니다.

아이디어가 있으십니까?

답변

3

정규식을 경로 구분 기호로 분리하고 현재 검색 범위에 적용되는 정규식 부분 만 적용 했습니까? 이것은 훨씬 더 효율적인 진행 방법처럼 보입니다.

+1

나는 @tvanfosson에 동의한다. 불필요한 디렉토리 나열을 방지하기 위해 내려갈 때 디렉토리 항목을 점검해야합니다. 예를 들어,'C : \ test'에서, 그 디렉토리의 자식들만 검사합니다. 일치하는 항목이 하위 디렉토리 인 경우 하위 항목으로 내려 가서 하위 항목에 대해 다음 정규 표현식을 실행하는 식으로 진행할 수 있습니다. –

관련 문제