2012-08-29 2 views

답변

0

는 지금까지 내가 말할 수있는, 순수 루비 1.8에 임의의 인덱스에서 시작하여 큰 문자열에 대한 정규 표현식을 일치하는 더 효율적인 방법이있다.

이것은 주요 결함 인 것 같습니다. 이야기의 도덕적 인 부분은 : Ruby 1.9 사용!

3

당신은 ^.{start_index}

와 정규 표현식을 시작하거나 경기를 수행하기 전에 먼저 문자열을 걸릴 수 있습니다.

또는 Ruby 1.8을 사용하는 데 제약이 있지만 직접 라이브러리를 설치할 수있는 경우 Oniguruma을 사용할 수 있습니다.

+0

물론 ...하지만 "계산 효율적인"대안을 요청했습니다. –

+1

@AlexD :'^. {n}'이 계산 상 효율적이지 않다고 생각하게 만드는 이유는 무엇입니까? 정규식 엔진은 아마도 문자열로 오프셋되어 거기에서 작업을 시작합니다. 빠른 벤치마킹은'^. {n}'이 명백한 대안 (''.. [... .. 1] .match (re)')보다 약간 빠르다는 것을 암시합니다. –

+0

응답하기 전에'irb '에서 시도해 보았는데 비효율적입니다. O (n) 문자열의 길이, 그리고 나는 이것을 사용하여 수십 또는 수백 메가 바이트 수있는 큰 파일을 구문 분석합니다. 내가 한 테스트에 따르면,이 경우 한 번의 매치에서 30 초 정도 걸릴 수 있습니다. –