O desafio
Dada uma regex válida, produza uma regex que corresponda ao mesmo conjunto de cadeias, mas invertida.
A tarefa
Este desafio utiliza o maior número de operações básicas de regex: ^
, $
, ?
, +
, *
, []
, {}
, |
. Não existem grupos de captura ou coisas complicadas. Caracteres especiais podem ser escapados.
Entrada / Saída de amostra
Nota: Entrada inválida nunca será fornecida e geralmente existem várias respostas possíveis para uma entrada especificada!
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
Demonstração de trabalho que demonstra entradas / saídas corretas. Isso tem alguma lógica adicional para validar entradas desnecessárias em uma resposta real. Considere entradas inválidas como comportamento indefinido.
Específicos
Por simplicidade, todos os caracteres especiais têm um significado especial ou são escapados; isto é, [[]
não é um intervalo de caracteres para [
. As faixas de comprimento são provenientes dos EREs POSIX padrão; isto é, {n}
, {n,}
, e {n,m}
são suportados. Os caracteres variam []
e [^]
são suportados. Por causa dessas regras, e como nenhuma entrada inválida é fornecida, você realmente precisa apenas copiar o conteúdo delas diretamente na saída. Por fim, a ganância não importa, ou seja, não importa se a regex reversa encontra uma correspondência diferente primeiro, ela só precisa encontrar uma correspondência para o mesmo conjunto de strings.
Pontuação
O menor programa em bytes (exceto trapaças, como solicitações de rede) vence. O programa pode usar IO real ou simplesmente definir uma função.
(^a|b)(c$|d)
um caso de teste.
(a)?(b)+
↦ (b)+(a)?
?
()
, usada no seu exemplo.
?
que anexar. Tente digitar/a(?bc)/
no console do navegador.