1

正規表現には一種の問題があります。複数の (この場合は 1 つの) バッファーを 1 つの文字列としてカウントする必要があります。

ファイルをダウンロードして、特定の文字列、たとえば「foobar」を検索したいとします。ファイルサイズがどうなるかわかりませんし、html コード用に数メガバイトの巨大なバッファを割り当てたくありません。

つまり、私はこの小さなバッファーを持っているということです。64 バイトとしましょう。そのファイルのチャンクを書き、char配列が次のようになったとしましょう

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

すべて問題ないように見えますが、配列がこのようなものだった場合

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

そして、チャンクの他の書き込みでは、次のようになります

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

問題は自明です。正規表現は、個別のチェックで文字列を検出しません。一度にページを格納するために大きなバッファ サイズを割り当てることもできますが、それは大きな無駄です。

それで、私にはアイデアがあります-バッファを分割します。最初の書き込みでこれらのバッファを取得するとしましょう

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

次に、2回目の書き込みの後、これを取得します

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

さて、これらのバッファを 1 つとしてカウントする正規表現関数があれば、それは素晴らしいことです。RAMに多くのスペースを割り当てることなく、バッファを交互に繰り返し、必要な文字列を引き出すことができました。

それを行うC ++正規表現ライブラリはありますか? 何か案は?

4

2 に答える 2

1

std::regex_match(C++11 以降で使用可能、 header を参照<regex>) には、検索する「文字列」を区切るイテレータのペアを取るインターフェイスがあります。バッファのコレクションを順番に単純に反復処理する独自のイテレータ クラスを作成できます。

于 2013-05-18T10:10:04.860 に答える
0

バッファを変更するたびに、バッファを一時バッファに連結し、正規表現を使用して検索できます。すなわち。読み取りのすべてのペア。

于 2013-05-18T10:16:57.077 に答える