Estoy usando Potato 2.2r3 Las expresiones regulares en mi sistema parecen estar funcionando muy mal para los rangos de letras mayúsculas y minúsculas.
Hago una prueba desde egrep y .. ALUCINO. egrep '[A-Z]'<<FIN A B C Y Z a b c y z 0 1 FIN A B C Y Z b c y z Las letras minúsculas no deberían salir. Curiosamente la 'a' minuscula no sale y las restantes si, pero no queda en esto la cosa. egrep '[a-z]'<<FIN A B C Y Z a b c y z 0 1 FIN A B C Y a b c y z Ahora no deberían haber salido las mayúsculas pero la única mayúscula que no sale es la 'Z' y las restantes si. En realidad otro tipo de pruebas muestran todo tipo de resultados absurdos. Acabo de comprobar que esto pasa con LANG=es_ES En cambio con LANG=es el comportamiento es totalmente correcto. Dado que las expresiones regulares se usan en un montón de programas me gustaría saber como una cosa así puede estar pasando. Una cosa así puede causar un destrozo enorme en los datos de cualquier sistema. Estoy usando LANG=es_ES yo creo que desde hace más de un año y claro si alguna vez se ha obtenido algún resultado erroneo, me pasó desapercibido. 'egrep' no es el único afectado. Cualquier programa que use expresiones regulares se ve afectado y para demostralo he realizado un programa de prueba en c. ============8<------------------------------------------------------ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #include <libintl.h> #include <regex.h> char cadaux[300]; int EvalRegExpReg(char *Patron, char *Cad){ regex_t preg; int cod1, cod2; cod1=regcomp(&preg, Patron, REG_EXTENDED); if (cod1!=0){ cod2=regerror(cod1, &preg, cadaux, sizeof(cadaux)); fprintf(stderr, "Error '%s' compilando patrón '%s'\n", cadaux, Patron); return cod1; } cod1=regexec(&preg, Cad, 0, NULL, 0); if (cod1!=0){ cod2=regerror(cod1, &preg, cadaux, sizeof(cadaux)); fprintf(stderr, "ExpresionRegular='%s', Cadena='%s'\n", Patron, Cad); fprintf(stderr, "Resultado= '%s'\n", cadaux); } regfree(&preg); return cod1; } main(int argc, char **argv){ setlocale(LC_ALL, ""); if (argc!=3){ fprintf(stderr, "Uso:\nregexpr <patron> <cadena>\n"); exit (-1); } exit (EvalRegExpReg( argv[1], argv[2])); } ============8<------------------------------------------------------ Si esto es un Bug me parece gordísimo. Si no lo es, necesito que algún alma caritativa me aclare las ideas. Un saludo Antonio Castro +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ /\ /\ Ciberdroide Informática (Tienda de Linux) \\W// <<< http://www.ciberdroide.com >>> _|0 0|_ +-oOOO--(___o___)--OOOo----------------------------------------------------+ | . . . . U U . . . . Antonio Castro Snurmacher [EMAIL PROTECTED] | | . . . . . . . . . . | +()()()----------()()()----------------------------------------------------+ | *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** | | <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>> | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+