루비 1.9에서는 String#match(regexp,start_index)
을 사용합니다. 나는 Ruby 1.8에서 (계산 상으로 효율적인) 상응하는 것이 틀림 없다고 확신하지만 그것을 발견 할 수 없다. 그게 뭔지 아십니까?Ruby 1.8에서 특정 문자 색인부터 시작하는 regexp와 어떻게 일치합니까?
1
A
답변
0
는 지금까지 내가 말할 수있는, 순수 루비 1.8에 임의의 인덱스에서 시작하여 큰 문자열에 대한 정규 표현식을 일치하는 더 효율적인 방법이있다.
이것은 주요 결함 인 것 같습니다. 이야기의 도덕적 인 부분은 : Ruby 1.9 사용!
3
당신은 ^.{start_index}
와 정규 표현식을 시작하거나 경기를 수행하기 전에 먼저 문자열을 걸릴 수 있습니다.
또는 Ruby 1.8을 사용하는 데 제약이 있지만 직접 라이브러리를 설치할 수있는 경우 Oniguruma을 사용할 수 있습니다.
물론 ...하지만 "계산 효율적인"대안을 요청했습니다. –
@AlexD :'^. {n}'이 계산 상 효율적이지 않다고 생각하게 만드는 이유는 무엇입니까? 정규식 엔진은 아마도 문자열로 오프셋되어 거기에서 작업을 시작합니다. 빠른 벤치마킹은'^. {n}'이 명백한 대안 (''.. [... .. 1] .match (re)')보다 약간 빠르다는 것을 암시합니다. –
응답하기 전에'irb '에서 시도해 보았는데 비효율적입니다. O (n) 문자열의 길이, 그리고 나는 이것을 사용하여 수십 또는 수백 메가 바이트 수있는 큰 파일을 구문 분석합니다. 내가 한 테스트에 따르면,이 경우 한 번의 매치에서 30 초 정도 걸릴 수 있습니다. –