El reto
Dada una expresión regular válida, genere una expresión regular que coincida con el mismo conjunto de cadenas, pero invertida.
La tarea
Este reto utiliza la mayoría de las operaciones básicas de expresiones regulares: ^
, $
, ?
, +
, *
, []
, {}
, |
. No existen grupos de captura ni ninguna de esas cosas complicadas. Se pueden escapar caracteres especiales.
Muestra de entrada / salida
Nota: ¡Nunca se darán datos no válidos, y generalmente hay múltiples respuestas posibles para un ingreso dado!
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>
Manifestación
Demostración de trabajo que demuestra entradas / salidas correctas. Esto tiene una lógica adicional para validar entradas que no son necesarias en una respuesta real. Considere entradas no válidas como comportamiento indefinido.
Detalles específicos
Por simplicidad, todos los caracteres especiales tienen su significado especial o se escapan; es decir, [[]
no es un rango de caracteres para [
. Los rangos de longitud provienen de ERE POSIX estándar; es decir, {n}
, {n,}
, y {n,m}
son compatibles. Los rangos de caracteres []
y [^]
son compatibles. Debido a estas reglas, y dado que no se proporciona una entrada no válida, realmente solo necesita copiar el contenido de estas directamente a la salida. Por último, la codicia no importa, es decir, no importa si la expresión regular invertida encuentra una coincidencia diferente primero, solo necesita encontrar una coincidencia para el mismo conjunto de cadenas.
Tanteo
El programa más pequeño en bytes (salvo trampas como solicitudes de red) gana. El programa puede usar IO real o simplemente definir una función.
(^a|b)(c$|d)
embargo, es posible que desee agregar algo como un caso de prueba.
(a)?(b)+
↦ (b)+(a)?
?
()
, que se utiliza en su ejemplo.
?
que apegarse. Intenta escribir/a(?bc)/
en la consola del navegador.