Kennt jemand eine gute streaming regulären Ausdruck Parser für Java?Regelmäßiger Ausdruck auf SAX-Stream anwenden
Insbesondere möchte ich in der Lage sein, den Inhalt eines XML-Element-Streams durchzusehen und zu erkennen, ob und wo der Inhalt einem bestimmten regulären Ausdruck entspricht. Zum Beispiel möchte ich die SAX- "Zeichen" -Rückrufe vom Inhalt eines MediaWiki-Element-Streams durchsehen, aber feststellen, wo Teilzeichenfolgen mit Übereinstimmung == ([^ = \ n] +) == vorkommen.
Der Trick ist, dass der Inhalt in Chunks von unbestimmter Größe kommt, was bedeutet, dass übereinstimmende Teilstrings möglicherweise über mehrere Callbacks unterbrochen werden können.
Die einfache Lösung besteht natürlich darin, einfach alle Callbacks zu puffern und die eingebaute Regexp-Engine von Java auf der langen Zeichenfolge auszuführen. Das nimmt leider zu viel Speicher in Anspruch.
Der nächste Schritt in der Komplexität besteht darin, das Regexp in ein DFA umzuwandeln und zu erkennen, wann das DFA in den Zustand "Accept" übergeht. Ich habe mich gefragt, ob jemand weiß, ob einige Java-Bibliotheken diesen Prozess vereinfachen.
Ich habe Ragel angesehen; Dies erfordert jedoch, dass das DFA zur Kompilierzeit angegeben wird.
Ein solcher passender Teilstring (wie in Ihrem Beispiel) würde nur eine einzelne Zeile umfassen, was ist das Problem der Pufferung der letzten Zeile (oder ein paar von ihnen)? – Qtax
Ich kann mich nicht darauf verlassen, dass die Linien vernünftig sind. Einige Datensätze wurden mit langen Müllzeilen verwüstet. Vandalismus-Erkennung sollte nicht schrecklich hart sein, aber ich dachte, ich würde ein paar Minuten damit verbringen, diesen Ansatz zu untersuchen. – Zack