DFAベースの正規表現マッチャー内で「単語境界」一致を実装したいと思います。誰かがこれがどのように行われたか教えてくれますか?DFA正規表現マッチャーを使用して正規表現アサーション/ルックアサイン( bスタイルの単語境界)を実装する方法
私は現在、「dk.brics.automaton」ライブラリを使用していますが、アサーションをサポートしていません(例:\b
、単語境界)。私はDFAベースのエンジンを使用する必要があります。なぜなら、私の主な目標は実際に正規表現の等価性を判断することであり、実際のマッチングを行わないからです。
さらに、次の質問への答えはこれが可能であることを示しているようだ: DFA based regular expression matching - how to get all matches?
を言っては「ここでも、シミュレータに特別な指示をイプシロン遷移を追加することで、これを管理する場合。アサーションが成功すると、状態ポインタは継続し、それ以外の場合は破棄されます。
しかし、これは何を意味するのかよく分かりません。エンドポイントを見て、そのエンドポイントがアサーションを満たしている場合にのみトラバースできる特別なタイプのイプシロン遷移でのみ、または何らかの方法で構成された「通常の」イプシロン遷移で行うことができるかどうかを示唆していますか?これらの「特殊な」タイプのイプシロントランジションが必要な場合は、これらをどのようにして(つまり標準DFAに変換して)決定できますか?
実際にこれを実装する方法の説明へのポインタは、大いに感謝しています。
これは、前の文字と現在の値が '\ b'の条件と一致しない場合に失敗する、イプシロン遷移によって引き起こされる任意のコードがあることを意味します。だからあなたはどこかに "前のキャラクター"を保つ必要があります。 –