4

Javaで増分正規表現マッチングを可能にする方法または効率的なライブラリはありますか?

つまり、一度に数バイトを送信でき、これまでのデータと正規表現との照合を追跡できるOutputStreamが必要です。この正規表現が完全に一致しないバイトを受信した場合は、ストリームにそのように通知してもらいたいと思います。それ以外の場合は、現在のベストマッチがある場合はそれについて通知し続ける必要があります。

これは非常に難しく、明確に定義されていない問題である可能性が高いことを認識しています。なぜなら、表現全体またはその一部に一致する正規表現を想像できるか、ストリームがとにかく閉じられるまで決定がないためです。。*のような些細なことでも、H、He、Hel、Hell、Helloなどに一致する可能性があります。そのような場合、私はストリームに「はい、この式が今終わっていれば一致する可能性があります。これが返されるグループです」と言いたいと思います。

しかし、Patternが文字列に一致する文字列を内部的にステップスルーする場合、それほど難しくはないでしょうか。

4

1 に答える 1

1

インクリメンタルマッチングは、正規表現に対応する有限状態オートマトンを計算し、入力の文字を処理しながらその状態遷移を実行することでうまく実現できます。ほとんどのレクサーはこのように機能します。ただし、このアプローチはグループではうまく機能しません。

So perhaps you could make this two parts: have one matcher which figures out whether there is any match at all, or any chance of a match in the future. You can use that to give you a quick reply after every input character. Once you have a complete match, you can exucte a backtracking and grouping regular expression engine to identify your matching groups. In some cases, it might be feasible to encode the grouping stuff into the automaton as well, but I can't think of a generic way to accomplish this.

于 2012-10-09T17:14:16.640 に答える