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
