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


ComFreek

Mod | @comfreek
Moderator
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?
 

sheel

I love Asm
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
 

ComFreek

Mod | @comfreek
Moderator
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).
 

Parantatatam

mag Cookies & Kekse
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?
 

ComFreek

Mod | @comfreek
Moderator
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?
 

Parantatatam

mag Cookies & Kekse
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.