Por ejemplo, la palabra desastre funcionaría debido Debac, pero lecho marino no funcionaría porque: 1. no hay c en ninguna secuencia de 5 caracteres que pueda formarse, y 2. la letra e aparece dos veces. Como otro ejemplo, comentarios funcionaría debido a edbac. Y recuerde, la solución debe hacerse usando solo expresiones regulares.Uso de expresiones regulares para buscar una palabra con las cinco letras ABCDE, cada letra aparece exactamente una vez, en cualquier orden, sin descansos entre
Una estrategia que intenté implementar fue: unir la primera letra si está dentro [a-e] y recordarla. Luego encuentra la siguiente letra en [a-e] pero no la primera letra. Y así. No estaba segura de lo que era la sintaxis (o incluso si existía alguna sintaxis) por lo que mi código no funcionó:
open(DICT, "dictionary.txt");
@words = <DICT>;
foreach my $word(@words){
if ($word =~ /([a-e])([a-e^\1])([a-e^\1^\2])([a-e^\1^\2^\3])([a-e^\1^\2^\3^\4])/
){
print $word;
}
}
Yo también estaba pensando en utilizar (= expresiones regulares?) Y \ G, pero yo no estaba' t seguro cómo funcionaría.
+1 - Me gusta más que mi propia solución. Para explicar a los demás, los lookaheads garantizan que: en las siguientes 5 letras, haya al menos una 'a', al menos una 'b', al menos una 'c', al menos una 'd' y al menos una ' mi'. Dado que solo hay cinco "espacios", se garantiza que cada uno aparezca exactamente una vez. –
Se agregó una solución alternativa. – ikegami
La solución alternativa también funciona si quiere buscar material duplicado (p. Ej.abcdd en lugar de abcde) – ikegami