テキストをトークン化するためのフレックスを備えたスキャナーを作成しています。そのために、用語、数字、電子メールなど、文字通りテキストに含まれる可能性のあるあらゆる種類の出現に一致する式を定義しました。
解析する文字列、位置 (一致したトークンの最初の文字)、および長さ ( yyleng
. 最初に、いくつかの変数でそれを処理し、yyleng を使用して、この値を変数に追加し、一致の解析済みテキストの開始位置を維持できると考えました。ただし、html タグや html エンティティなどの他のいくつかの出現以外に無視されるため、2 つの一致の間に大きな空白がある場合、それは機能しません。
それを解決する方法はありますか?
たとえば、次の文字列:
I am a text, tokenize me.
^ ^ ^ ^ ^ ^ ^ ^
0 2 5 7 11 14 25 27 <-- pos in parsed string
0 2 1 4 1 8 2 1 <-- length of token
句読点を含む各単語が一致し、空白はすべて無視されます。ここで、文字列内の各一致の開始位置と長さを取得できるようにしたいと考えています。私のトークナイザー クラスでは、getNextTokenメソッドを実装し、トークンを返すそのメソッドを呼び出すたびに、開始位置、トークンの長さ、および現在の入力テキスト (char バッファーとして) を取得したいと考えています。lexer ファイル内でこれらの値を取得するための関数をいくつか定義できると思いました (一種のコールバック関数などとして)。
これを機能させる方法はありますか?