[QUIZ #18] Reguläre Ausdrücke - Reverse Engineered

Unter Anderem diese hier (heißen allerdings nicht Steuerzeichen. @sheel: was meintest du?)
Code:
(
[
?
.
*

Welche Aufgabe hast du denn vor zu lösen? Fängst du bei Stufe 1 an?
 
Genau die meinte ich.

* . + ? ( ) [ ] { } ^ |
Also das nächste Zeichen nach einem \ nur als normalen Text verarbeiten
(
außer das \s
Wenn man wirklich ein s will geht das ja ohne \
)
 
Hallo zusammen,

erst mal danke an ComFreek für die Wiederbelebung des Coding Quiz :)

Ich werde wohl eine Lösung in Haskell einreichen. Momentan bin ich bei Stufe 3+: ohne Brute Force, aber mit „vollen“ regulären Ausdrücken (also inklusive Wiederholungen).

Was die Sache vielleicht etwas einfacher machen könnte: um sämtliche reguläre Ausdrücke zu erfassen, genügt es folgende Konstrukte zu unterstützen:
  • Leerer Ausdruck („“)
  • Einzelnes Zeichen („a“)
  • Verkettung zweier Ausdrücke („ab“)
  • Alternative mit genau zwei Möglichkeiten („a|b“)
  • Unbeschränkte Wiederholung („a*“)

Alles weitere lässt sich auf diese Basiskonstrukte zurückführen.

Grüße,
Matthias
 
Hallo Matthias,

bedank dich auch bei sheel ;-)

Ein einzelnes Zeichen ist bei mir genau dasselbe wie eine Verkettung zweier Ausdrücke
Wen es interessiert, ich habe momentan folgende Klassen:
-Interface: RegexToken
-Interface: SolvableRegexToken

-AnyCharacter
-LetterCharacterClass
-OrBranch
-TokenGroup
-NegativeTokenGroup
-TextSequence
-VariableCountSequence

Die Klassen sind beliebig schachtelbar (z.B. kann eine VariableCountSequence einen OrBranch beinhalten, der selbst aus irgendwelchen anderen Tokens besteht).

Ich bin gerade dabei, den Parser lauffähig zu kriegen. Dies ist in der Tat arbeitsaufwändiger, als der Lösungsteil (momentan funktioniert ja alles, nur man muss händisch die Objekte erstellen und verschachteln).
 
Bin ich total blöd, oder ist die Frage berechtigt, zu welchem RegExp man einen Text finden soll? Das steht doch so in der Aufgabenstellung, oder?
 
Der Nutzer gibt einen RegExp ein (Syntax allerdings beschränkt, siehe 1. Beitrag) und dein Programm findet einen Text, der auf das Muster des regulären Ausdrucks passt.

Oder was war deine Frage?
 
Ah, okay. Gut, wenn das so ist, weiß ich, was zu tun ist. Ich dachte nur, dass es da einen vorgegebenen RegExp gibt und man dann dazu einen Text finden soll – was allerdings im Nachhinein betrachtet doch zu einfach wäre.
 
Zurück