Regex zur Übereinstimmung mit Java String

8

In Scala's Parser-Kombinatoren ( JavaTokensParser insbesondere) gibt es eine Definition stringLiteral , das mit einer Java-ähnlichen Zeichenfolge übereinstimmt.

%Vor%

Leider funktioniert diese Regex nicht für lange Strings . Kennt jemand eine wiederverwendbare Implementierung, die dies tut, oder eine Modifikation der Regex, die platzsparender ist?

    
schmmd 07.10.2013, 19:24
quelle

1 Antwort

3

Interessantes Problem !!

Habe einfach damit herumgespielt und kam auf folgendes:

%Vor%

Hinweis: Die obige Regex wurde von der ersten Version an korrigiert ... sowohl die führenden '\' als auch die nachfolgenden Zeichen müssen wiederholt werden, nicht nur die nachfolgenden Zeichen, wie ich sie ursprünglich hatte!

Bearbeiten: Einen effizienteren regulären Ausdruck gefunden. Mit dem Folgenden kann es eine Zeichenfolge von bis zu 950 \ns -Paaren parsen, im Gegensatz zu dem Original, das zumindest in meiner Standardkonfiguration 556 analysieren konnte.

%Vor%

Edit 2: Basierend auf dem Kommentar von @schmdd habe ich einen noch besseren regulären Ausdruck. Dieser kann den 2500 \ns Folterfall analysieren. Das Geheimnis besteht darin, den gierigen Possessiv-Modifikator zu verwenden, was im Grunde genommen die Notwendigkeit des Backtracking ausschließt und somit auch die Rekursion abstellt.

%Vor%

Die Essenz der Lösung besteht darin, zu versuchen, so viel wie möglich zu kauen, wenn Sie mit etwas übereinstimmen.

%Vor%

Update: Eine Pull-Anforderung wurde an die Scala übermittelt Leute. Und es wurde akzeptiert.

    
Paul Wagland 07.10.2013, 20:29
quelle

Tags und Links