El 8 de julio de 2009 17:23, Aureliano Calvo<[email protected]> escribió: >>> Fíjense que cambia el hash de r1 después de matchear y también deja de >>> ser cierto r1.eql? r2. >> Hola! >> >> Probé un poco las expresiones y vi que el error se produce cuando en >> la expresión incluis esta parte \303[\200-\277] >> pero no entiendo para qué la usás por lo que pude avanzar mucho >> >> si te confirmo que : >> r1 = /([A-Za-z0-9])*(_([A-Za-z0-9])+)+/ >> r2 = /([A-Za-z0-9])*(_([A-Za-z0-9])+)+/ >> o >> r1 = /([A-Za-z0-9]|\\303[\\200-\\277])*(_([A-Za-z0-9]|\\303[\\200-\\277])+)+/ >> r2 = /([A-Za-z0-9]|\\303[\\200-\\277])*(_([A-Za-z0-9]|\\303[\\200-\\277])+)+/ >> >> >> no 'machean' "hola" y la comparacion r1.eql?(r2) es verdadero >> >> 'machean' "hola_mundo" y la comparacion r1.eql?(r2) es verdadero >> >> >> si poestas una cadena que 'machee' con \303[\200-\277] puedo probar un poco >> mas. >
En realidad tenés esta situación con cualquier expresión que contenga algún caracter de valor ascii de 128 (\200) a 255 (\377), es decir q estan fuera del ansii de 7 bits. Y el error ocurre tanto cuando tu expresion matchea como cuando no. Esto sólo falla: r1 = /\200/ r2 = /\200/ r1 =~ "cualquier string" r1 == r2 # devuelve false El tema debe ser que estas utilizando algun encoding (ISO 8859-1 por ejemplo), que la libreria built-in de regex no soporta y esta queda en estado erroneo despues de hacer el matcheo. Una solucion, si tenes ganas de tomarte el trabajo de hacer, es pasar tus strings a utf-8, y decirle a r1, q use unicode cuando la creas, (claro q tambien tendrias q reescribir tus expresiones regurales para q usen los caracteres unicode). Por elemplo, esto en mi maquina funciona (por cierto q mi enconding por defecto es utf-8): r1 = /á/u r2 = /á/u r1 =~ "asd á asd " r1 == r2 # devuelve true r1.hash == r2.hash # devuelve true Tendrias q ver vos, si vale la pena pasar todos tus strings a utf-8 (con Iconv por ejemplo), antes de probarlos contra tus expresiones. Saludos. _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
