La estructura de los dos diccionarios usados para tal fin: english.txt y espanol.txt. El primero tiene por cada línea una palabra en minúscula mientras que el segundo tiene una estructura "Palabra/..." donde el caracter "/" indica el final de la palabra y la primera letra puede o no ser Mayúscula.
La solución en inglés resultó ser la palabra "strengths" con longitud de 9 caracteres, una sóla vocal y válida. En el idioma español resultó la palabra "grill" de longitud 5. De longitud 4 resultan clan, flan, gran, plan, vals, tren clon, flor y cruz.
La expresión regular usada para el diccionario en inglés :
^s([^aeiouy]{0,50})a([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})e([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})i([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})o([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})u([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})y([^aeiouy]{0,50})$
La expresión regular usada para el diccionario en español :
^([^AEIOUYaeiouy]{0,50})[aA]([^AEIOUYaeiouy]{0,50})(?=/)
^([^AEIOUYaeiouy]{0,50})[eE]([^AEIOUYaeiouy]{0,50})(?=/)
^([^AEIOUYaeiouy]{0,50})[eI]([^AEIOUYaeiouy]{0,50})(?=/)
^([^AEIOUYaeiouy]{0,50})[oO]([^AEIOUYaeiouy]{0,50})(?=/)
^([^AEIOUYaeiouy]{0,50})[uU]([^AEIOUYaeiouy]{0,50})(?=/)
El shellscript que realiza la búsqueda :
#!/bin/bash
##################################################################
#
# Prueba de Expresiones Regulares con grep
# [ Cesar Rivera ]
#
# Probado en distribución Fedora
#
##################################################################
vocales='a e i o u' ;
q="'" ;
v1=0 ;
for vocal in $vocales ; do
gx="grep -P ^s([^aeiouy]{0,50})$vocal([^aeiouy]{0,50})\$ \
--color /usr/share/dict/words";
ex=`$gx`;
for palabra in $ex ; do
v2=`echo ${#palabra}` ;
if [[ $v2 -gt $v1 ]]; then
v1=$v2 ;
echo $palabra $v1 ;
fi ;
done ;
done ;
Resultado:
sacks 5
sanghs 6
scarphs 7
schmaltz 8
strengths 9
La última palabra mostrada "strengths" resultó ser la mayor. Curiosamente, en el idioma inglés, las palabras largas encontradas que poseen una sóla vocal comienzan con "s".Fin del ejercicio de expresión regular