2014-07-10 2 views
1

나는 큰 rtf 파일,> 500 메가 바이트를 처리해야했다. 이 큰 파일에서 부품을 찾아서 추출해야했습니다.거대한 데이터 블록을위한 정규식

데모 용으로 Java로 작성된 작동 프로토 타입입니다.

작은 RTF 파일 (~ 10MBb)에서 작동하는 정규 표현식을 작성하여 거대한 파일에이 표현식을 적용하려고했습니다.

그리고이 regexp 실행시 "스택 오버플로"오류가 발생합니다.

정규 표현식이 재귀적인 성격을 가지고 있다는 것을 이해한다면, 나는 예외의 이유가됩니다. regexp가 잘 작동하는 작은 파일들.

이유를 올바르게 이해하고 있습니까?

+3

더 잘 이해하려면 정규식을 몇 가지 샘플 데이터와 함께보아야합니다. – anubhava

+2

언어 또는 텍스트 편집기를 사용하고 있습니까? FWIW, 텍스트 편집기 인 경우 EditPad Pro regex guru Jan Goyvaerts가 멋진 정규 표현식을 사용하고 파일을 기가 바이트 단위로 처리합니다. – zx81

+0

@anubhava 불행히도 이제는 소스 코드에 액세스 할 수 없습니다. 죄송합니다. –

답변

0

아니요 : 정규식에 재귀 적 특성이 없습니다. 괜찮은 언어는 그러한 표현을 유한 상태 기계로 단순히 변환합니다. 즉, 10 MiB 또는 500 MiB의 파일을 필터링하려면 동일한 양의 메모리가 필요합니다 (결과적으로 스택 크기도 필요함). 또한 시간에 따라 선형 적으로 확장됩니다. 하나는 10 MiB 중 하나보다 500 MiB의 파일을 필터링하는 데 50 배의 시간이 더 걸릴 것으로 예상됩니다.

무엇을 정규식 평가기를 사용하고 있습니까? grep/sed의 경우 더 작거나 큰 파일은 문제되지 않습니다.

+0

나는 자바 코드에서 regex를 사용하여 데모 목적을 위해 빠른 - 더러운 작업 프로토 타입. –

+0

하지만 당신은 우리에게 정규식을 보여줄 수 있으며, 어쨌든 정규식과 관련이 있다고 확신 할 수 있습니까? 물론 정규 표현식은 구문 적으로 정확해야합니다. –

+0

정확하고 작은 파일을 완벽하게 처리했습니다. 그러나 거대한 파일에 실패했습니다. –

관련 문제