2009-05-26 4 views
1

Ist es trotzdem, ein Regex-Muster zu bekommen, um die Suche nach einem Spiel automatisch zu stoppen. Ich möchte die Regex-Suche zu einem Webdienst hinzufügen, den ich erstellen möchte, aber ich möchte nicht, dass jemand eine Regex ausführen kann, die lange dauern würde, nur eine Übereinstimmung ist gut genug. Ist das möglich?Wie Regex-Matching nach 1 Übereinstimmung zu stoppen, ohne nicht-gierige Zeichen

+1

Ist nicht Ihr Worst-Case-Szenario jemand, der eine komplexe Regex erstellt, die KEINE Übereinstimmungen hat? Es scheint, als ob Sie besser mit einem anderen Mechanismus arbeiten, um Regex-Suchen von der Laufzeit zu verhindern. Alternativ sollten Sie herausfinden, ob Regex tatsächlich ein erheblicher potenzieller Engpass ist, bevor Sie es voroptimieren – Jherico

Antwort

0

Die wirklich schlechten degenerierten Muster passen nie zusammen. Und wenn Sie einen guten Weg finden, die degenerierten Fälle zu finden, werden Sie wahrscheinlich eine lot of money fällig sein. Sie sind wahrscheinlich besser dran mit einer Zeitüberschreitung. In Perl würde ich alarm kombiniert mit einem Block eval verwenden.

Sie können auch nach (*COMMIT) in Perl suchen, die Backtracking verhindert.

1

Sie könnten immer noch mit einer langen laufenden Regex enden, sogar mit einem begrenzenden Quantifizierer.

Die Implementierung einer unterbrechbaren Funktion wie this thread ist eine weitere Option.

Verwandte Themen