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

Responder a