Le défi
Étant donné une expression régulière valide, affichez une expression régulière qui correspond au même ensemble de chaînes, mais inversée.
La tâche
Ce défi utilise le plus les opérations de base regex: ^
, $
, ?
, +
, *
, []
, {}
, |
. Il n'y a rien de tel que des groupes de capture ou tout ce genre de choses compliquées. Les caractères spéciaux peuvent être échappés.
Exemple d'entrée / sortie
Remarque: Une entrée non valide ne sera jamais donnée, et il y a généralement plusieurs réponses possibles pour une entrée donnée!
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>
Démo
Démo de travail qui montre les entrées / sorties correctes. Cela a une logique supplémentaire pour valider les entrées qui n'est pas nécessaire dans une vraie réponse. Considérez les entrées non valides comme un comportement non défini.
Détails
Par souci de simplicité, tous les caractères spéciaux ont leur signification particulière ou sont échappés; c'est-à-dire, [[]
n'est pas une plage de caractères pour [
. Les plages de longueurs proviennent des ERE POSIX standard; c'est-à- {n}
dire {n,}
, et {n,m}
sont pris en charge. Les caractères varient []
et [^]
sont pris en charge. En raison de ces règles, et comme aucune entrée non valide n'est fournie, vous n'avez vraiment besoin que de copier le contenu de celles-ci directement dans la sortie. Enfin, la gourmandise n'a pas d'importance, c'est-à-dire que peu importe si l'expression régulière inversée trouve d'abord une correspondance différente , il lui suffit de trouver une correspondance pour le même ensemble de chaînes.
Notation
Le plus petit programme en octets (sauf la tricherie comme les requêtes réseau) gagne. Le programme peut soit utiliser de vraies E / S, soit simplement définir une fonction.
(^a|b)(c$|d)
un cas de test.
(a)?(b)+
↦ (b)+(a)?
?
()
, ce qui est utilisé dans votre exemple.
?
s'attacher. Essayez de taper/a(?bc)/
dans la console du navigateur.