Ich möchte "Wortgrenzen" -Matches in einem DFA-basierten regulären Ausdrucksmatcher implementieren. Kann mir jemand sagen, wie das geht?So implementieren Sie Assertionen/Lookarounds für reguläre Ausdrücke (d. H. B style word boundary) mit einem regulären DFA-Expressionsvergleicher
Um etwas Hintergrund zu geben, verwende ich derzeit die Bibliothek "dk.brics.automaton", aber es unterstützt keine Assertionen (z. B. \b
, Wortgrenze). Ich muss eine DFA-basierte Engine verwenden, da mein Hauptziel darin besteht, die Äquivalenz von regulären Ausdrücken zu bestimmen und nicht die tatsächliche Übereinstimmung.
Zusätzlich ist die Antwort auf die folgende Frage scheint dies möglich ist, um anzuzeigen. DFA based regular expression matching - how to get all matches? von
„Wieder sagen wir das schaffen, indem sie ein Epsilon-Übergang mit speziellen Anweisungen an den Simulator Hinzufügen Wenn die Assertion besteht, dann wird der Statuszeiger fortgesetzt, andernfalls wird er verworfen. "
Ich kann nicht ganz herausfinden, was das bedeutet, jedoch. Schlägt es vor, dass es nur mit einem speziellen Typ von Epsilon-Übergang gemacht werden kann, der seine Endpunkte betrachtet und nur durchlaufen werden kann, wenn sein Endpunkt die Behauptung erfüllt, oder kann es mit "normalen" Epsilon-Übergängen gemacht werden, die irgendwie konfiguriert sind? Wenn ich diese "spezielle" Art von Epsilon-Übergängen benötige, wie können diese dann determiniert werden (d. H. In einen Standard-DFA umgewandelt werden)?
Zeiger zu irgendwelchen Beschreibungen, wie man das wirklich durchführt, werden sehr geschätzt.
es bedeutet nur, dass es irgendeinen willkürlichen Code gibt, der durch den Epsilon-Übergang ausgelöst wird, der fehlschlägt, wenn das vorherige Zeichen und der Strom nicht mit den Bedingungen für '\ b' übereinstimmen. Sie müssen also den "vorherigen Charakter" irgendwo aufbewahren. –