Die Herausforderung
Bei einem gültigen regulären Ausdruck wird ein regulärer Ausdruck ausgegeben, der mit demselben Satz von Zeichenfolgen übereinstimmt, jedoch umgekehrt ist.
Die Aufgabe
Diese Herausforderung nutzt die grundlegendsten regex Operationen: ^
, $
, ?
, +
, *
, []
, {}
, |
. Es gibt keine Capture-Gruppen oder so etwas Kompliziertes. Sonderzeichen können maskiert werden.
Sample Input / Output
Hinweis: Ungültige Eingaben werden niemals gegeben, und es gibt im Allgemeinen mehrere mögliche Antworten für eine bestimmte Eingabe!
Input | Sample Output
-----------|-------------
abc | cba
tuv? | v?ut
a(b|c) | (c|b)a
1[23] | [23]1
a([bc]|cd) | (dc|[bc])a
^a[^bc]d$ | ^d[^bc]a$
x[yz]{1,2} | [yz]{1,2}x
p{2} | p{2}
q{7,} | q{7,}
\[c[de] | [de]c\[
ab[c | <output undefined>
a(?bc) | <output undefined>
a[]]bc | <output undefined>
Demo
Arbeitsdemo , das korrekte Ein- / Ausgänge demonstriert. Dies hat einige zusätzliche Logik zum Validieren von Eingaben, die in einer realen Antwort nicht erforderlich sind. Betrachten Sie ungültige Eingaben als undefiniertes Verhalten.
Besonderheiten
Der Einfachheit halber haben alle Sonderzeichen entweder ihre spezielle Bedeutung oder werden maskiert. Das heißt, es [[]
ist kein Zeichenbereich für [
. Längenbereiche stammen aus Standard-POSIX-EREs; das heißt {n}
, {n,}
und {n,m}
werden unterstützt. Die Zeichenbereiche []
und [^]
werden unterstützt. Aufgrund dieser Regeln und da keine ungültige Eingabe angegeben wird, müssen Sie den Inhalt nur direkt in die Ausgabe kopieren. Schließlich spielt Gier keine Rolle, dh es spielt keine Rolle, ob der umgekehrte reguläre Ausdruck zuerst eine andere Übereinstimmung findet , sondern nur eine Übereinstimmung für denselben Satz von Zeichenfolgen.
Wertung
Das kleinste Programm in Bytes (außer bei Betrug wie Netzwerkanforderungen) gewinnt. Das Programm kann entweder echte E / A verwenden oder einfach eine Funktion definieren.
(^a|b)(c$|d)
einen Testfall hinzufügen .
(a)?(b)+
↦ (b)+(a)?
?
()
, die in Ihrem Beispiel verwendet wird.
?
man sich festmachen kann. Versuchen Sie,/a(?bc)/
in die Konsole des Browsers zu tippen.