2013-05-18 61 views
1

我有一種正則表達式的問題,我希望它在一個字符串中計數多個(在這種情況下,一個)緩衝區。C++在多個緩衝區上的正則表達式

比方說,我下載一個文件,我想搜索一個特定的字符串,讓我們說「foobar」。 我不知道文件大小是多少,我不想爲html代碼分配一大塊幾兆字節的緩衝區。

所以,我的想法是,我有這個小緩衝區,可以說64個字節。 比方說,我們寫文件的塊和字符數組類似

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

似乎一切都很好,但如果數組是這樣

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

而且對塊的其他寫變成

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

問題是不言自明的。正則表達式不會在單獨的檢查中找到字符串。我們可以一次分配較大的緩衝區大小來包含頁面,但這是一個巨大的浪費。

所以,我有一個想法 - 拆分緩衝區。讓我們在第一次寫說我們得到這些緩衝區

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

那麼,第二次寫操作後,我們得到這個

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

現在,如果有一個正則表達式的功能,將計算這些緩衝區爲一體,將是巨大的。我可以簡單地保持交替的緩衝區,並拉動我想要的字符串,而不用在RAM中分配大量空間。

是否有一個C++正則表達式庫可以做到這一點?有任何想法嗎?

回答

1

std::regex_match(從C++ 11開始可用,請參閱標頭<regex>)有一個接口,它需要一對迭代器來分隔「字符串」進行搜索。您可以創建自己的迭代器類,它將迭代依次緩衝。

0

在每次更改緩衝區之後,可以將緩衝區連接到臨時緩衝區,然後使用正則表達式進行搜索。即。爲每一對讀取。

+0

是的,我知道,它很簡單,但我是一個表現怪胎,我想盡可能少地將東西複製到臨時緩衝區。我會這樣做,除非我找不到一種方法將這兩個緩衝區一次性提供給正則表達式。 –