son pwc las kpmg inapropiadas ejemplos ejemplo cuáles auditoría auditoria aseveraciones aserciones afirmaciones ruby regex lookbehind

ruby - pwc - ejemplo de aseveraciones



¿Hay algún error en las aserciones de Ruby lookbehind(1.9/2.0)? (1)

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

"foo" =~ /(?<=f).*/m => 1 "foo" =~ /(?<=fo).*/m => nil

Esto solo parece suceder con el modo de línea única activado (el punto coincide con la línea nueva); sin eso, todo está bien:

"foo" =~ /(?<=f).*/ => 1 "foo" =~ /(?<=fo).*/ => 2

Probado en Ruby 1.9.3 y 2.0.0.

Véalo en Rubular

EDITAR: Algunas observaciones más:

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

"foo" =~ /(?<=fo).*$/m => nil

Pero junto con un cuantificador perezoso, "funciona":

"foo" =~ /(?<=fo).*?$/m => 2

EDITAR: 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" =~ /(?<=fo).+/m => 2 "foo" =~ /(?<=fo).{1,}/ => 2

En Ruby 2.0:

"foo" =~ /(?<=fo).+/m => nil "foo" =~ /(?<=fo).{1,}/m => nil

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

"foo" =~ /(?<=fo).{0,}/m => nil

Pero {n,m} funciona en ambos:

"foo" =~ /(?<=fo).{0,1}/m => 2 "foo" =~ /(?<=fo).{0,2}/m => 2 "foo" =~ /(?<=fo).{0,999}/m => 2 "foo" =~ /(?<=fo).{1,999}/m => 2


Esto se ha clasificado oficialmente bugs.ruby-lang.org/issues/8023 , junto con otro problema relacionado con los anclajes /Z en cadenas multilínea.