33 Stimmen

Wie kann ich eine teilweise Übereinstimmung mit java.util.regex.* durchführen?

Ich habe die java.util.regex.* Klassen für reguläre Ausdrücke in Java und alles gut so weit verwendet. Aber heute habe ich eine andere Anforderung. Nehmen wir zum Beispiel an, das Muster sei "aabb". Wenn die eingegebene Zeichenkette nun aa ist, wird sie definitiv nicht übereinstimmen, aber es besteht immer noch die Möglichkeit, dass, wenn ich bb anhänge, es zu aabb wird und es passt. Hätte ich jedoch mit cc begonnen, würde es nie passen, egal was ich anhänge.

Ich habe die Klasse Pattern und Matcher untersucht, aber keine Möglichkeit gefunden, dies zu erreichen.

Die Eingabe kommt vom Benutzer, und das System muss warten, bis das Muster übereinstimmt, oder es wird nie übereinstimmen, unabhängig von einer weiteren Eingabe.

Haben Sie einen Hinweis?

Danke.

1 Stimmen

Welche Regex haben Sie bis jetzt gefunden?

0 Stimmen

Nur um das zu verstehen - Sie sind auf der Suche nach "Regexing fortzusetzen", so zu sprechen, von dem Punkt, den Sie verlassen (ohne Wiederholen der Regex auf die gesamte Zeichenfolge), basierend auf zusätzliche Benutzereingaben? Wenn ja, ist das nicht möglich, aus Gründen, die ich erklären kann, wenn Sie dies bestätigen - es sei denn, Sie geben zusätzliche Einschränkungen.

0 Stimmen

Machen Sie die bb Teil optional aa(bb)?

0voto

ddimitrov Punkte 3259

Wenn Sie jedes Zeichen der Regex optional machen und die Beschränkungen der Multiplizität lockern, erhalten Sie in etwa das, was Sie wollen. Wenn Sie zum Beispiel ein übereinstimmendes Muster "aa(abc)+bbbb" haben, können Sie ein "mögliches Übereinstimmungs"-Muster "a?a?(a?b?c?)*b?b?b?b?" haben.

Diese mechanische Art der Erstellung von Mustern für mögliche Übereinstimmungen deckt jedoch keine fortgeschrittenen Konstrukte wie Vorwärts- und Rückwärtsverweise ab.

-1voto

brainimus Punkte 10118

Möglicherweise können Sie dies mit einem Zustandsautomaten bewerkstelligen ( http://en.wikipedia.org/wiki/State_machine ). Ihre Zustände/Übergänge sollen gültige Eingaben und einen Fehlerzustand darstellen. Sie können dem Zustandsautomaten dann jeweils ein Zeichen (je nach Datenlage möglicherweise eine Teilzeichenkette) eingeben. An jedem beliebigen Punkt können Sie prüfen, ob sich Ihr Zustandsautomat im Fehlerzustand befindet. Wenn er sich nicht im Fehlerzustand befindet, wissen Sie, dass künftige Eingaben noch passen könnten. Wenn er sich im Fehlerzustand befindet, wissen Sie, dass zuvor etwas fehlgeschlagen ist und dass zukünftige Eingaben die Zeichenkette nicht gültig machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X