2013-05-18 2 views
1

정규식에 문제가 있습니다. 여러 개의 (이 경우 하나) 버퍼를 하나의 문자열로 간주하고 싶습니다.C++ 여러 버퍼의 정규 표현식

파일을 다운로드하고 "foobar"라고 가정 해 봅시다. 특정 문자열을 검색하려고합니다. 파일 크기가 어떻게 될지 모르겠으므로 html 코드 용 버퍼 몇 메가 바이트의 거대한 덩어리를 할당하고 싶지 않습니다.

그래서,이 작은 버퍼가있어서 64 바이트라고 할 수 있습니다. 의 우리가 해당 파일의 덩어리를 작성하고이

.............foobar............. 

모든 것이 잘 보인다처럼 char 배열이 보이지만 가정 해 봅시다 배열이

.............................foo 

처럼 그리고 청크의 다른 쓰기에 있던 경우 이된다.

bar............................. 

문제 자체는 자명하다. 정규식은 별도의 검사에서 문자열을 찾지 않습니다. 한 번에 페이지를 포함하기 위해 큰 버퍼 크기를 할당 할 수는 있지만 엄청난 낭비입니다.

그래서 저는 분할 버퍼를 가지고 있습니다. 의 처음 쓰기에 가정 해 봅시다 우리는 좋은 것 하나 이러한 버퍼를 계산 할 정규식 기능이 있다면이 버퍼가

............................foo 
------------------------------- // this one is empty 

다음, 두 번째 쓰기 후 우리는 지금이

............................foo 
bar............................ 

를 얻을 수 . 나는 단순히 버퍼를 번갈아 가면서 원하는 문자열을 RAM에 많은 공간을 할당하지 않고 끌어 올 수 있습니다.

이렇게 할 수있는 C++ regex 라이브러리가 있습니까? 어떤 아이디어?

답변

1

std::regex_match (C++ 11부터 사용 가능, 헤더 <regex> 참조)에는 "문자열"을 검색하는 한 쌍의 반복자를 사용하는 인터페이스가 있습니다. 자신 만의 반복기 클래스를 만들면 간단하게 순차적으로 버퍼.

0

버퍼가 번갈아 가면서 버퍼를 임시 버퍼로 연결 한 다음 정규식을 사용하여 검색 할 수 있습니다. 즉. 모든 읽기 쌍마다.

+0

그래, 나도 알아, 그 간단한,하지만 일종의 괴물이야 그리고 내가 할 수있는만큼 임시 버퍼에 물건을 복사하고 싶습니다. 한 번에 정규 표현식에이 두 버퍼를 공급할 방법을 찾지 못하면 그렇게 할 것입니다. –