No es un bug, '|' no es conmutativo en la mayoría de los motores de
regexps porque siempre toman el primer resultado que cumpla con el
patrón, recién se prueba la segunda alternativa cuando el primer
patrón falla (pero no es el caso de tu ejemplo). Las regexps POSIX
funcionan distinto, porque el estandar dice que el resultado tiene que
ser match más largo.

2009/6/6 Aureliano Calvo <[email protected]>:
> Según entiendo, la alternativa (o |) en regexps debería capturar el
> string lo más largo posible. Sin embargo, no siempre es así:
>
> En este ejemplo, como matchea la primera parte, ignora la segunda y
> matchea una sola a (en vez de 2).
> irb(main):002:0> "aaa".sub(/a|aa/) { "B" }
> => "Baa"
>
> Si damos vuelta las cláusulas, matchea 2 a. Esto es raro, pensé que |
> debería ser conmutativo.
> irb(main):003:0> "aaa".sub(/aa|a/) { "B" }
> => "Ba"
>
> Por último, si escribimos el mismo lenguaje con una regex de otra
> forma, captura todo lo que puede capturar.
> irb(main):004:0> "aaa".sub(/a{1,2}/) { "B" }
> => "Ba"
>
> ¿Está bien el comportamiento del |? ¿No debería siempre capturar 2 a?
>
> Lo probé con ruby 1.8.7:
> $ ruby --version
> ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
>
> Saludos,
> Aureliano.
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a