¿Hay algún error en las afirmaciones de Ruby LookBind (1.9 / 2.0)?

¿Por qué la expresión regular (?<=fo).* coincide con foo (mientras que (?<=f).* Hace)?

 "foo" =~ /(? 1 "foo" =~ /(? nil 

Esto solo parece ocurrir con el modo de línea única activado (el punto coincide con la nueva línea); Sin él, todo está bien.

 "foo" =~ /(? 1 "foo" =~ /(? 2 

Probado en Ruby 1.9.3 y 2.0.0.

Véalo en Rubular

EDIT: Algunas observaciones más:

Agregar un ancla de fin de línea no cambia nada:

 "foo" =~ /(? nil 

Pero junto con un cuantificador perezoso, “funciona”:

 "foo" =~ /(? 2 

EDIT: Y algunas observaciones más:

.+ funciona igual que su equivalente {1,} , pero solo en Ruby 1.9 (parece que esa es la única diferencia de comportamiento entre los dos en este escenario):

 "foo" =~ /(? 2 "foo" =~ /(? 2 

En Ruby 2.0:

 "foo" =~ /(? nil "foo" =~ /(? nil 

.{0,} está roto (tanto en 1.9 como en 2.0):

 "foo" =~ /(? nil 

Pero {n,m} funciona en ambos:

 "foo" =~ /(? 2 "foo" =~ /(? 2 "foo" =~ /(? 2 "foo" =~ /(? 2 

Esto se ha clasificado oficialmente como un error y, posteriormente , se ha solucionado , junto con otro problema relacionado con los anclajes \Z en cadenas multilínea.

Intereting Posts