Se que la peticion que voy a realizar iria mas bien en el apartado de
Ruby, pero si no es mucha molestia…
Necesito que de un String, me devuelva un substring desde el primer
caracter hasta la primera secuencia de ‘\n\n’. He estado mirando en la
documentacion de Ruby, pero no encuentro ninguna funcion que me permita
hacer esto.
Lo podria hacer tratando como un array el string e ir recolectando
todos los caracteres hasta encontrar dos \n seguidos, pero si hubiera
una funcion mas cortita pues mejor.
¿Alguien me podria dar una pista? Gracias!
Lo podria hacer tratando como un array el string e ir recolectando
todos los caracteres hasta encontrar dos \n seguidos, pero si hubiera
una funcion mas cortita pues mejor.
¿Alguien me podria dar una pista? Gracias!
Puedes usar t@mbien el poder de los grupos en las expresiones regulares
(te recomiendo le dediques un tiempo para aprenderlos a usar …te
ahorraran varias lineas de codigo)
Puedes usar t@mbien el poder de los grupos en las expresiones regulares
(te recomiendo le dediques un tiempo para aprenderlos a usar …te
ahorraran varias lineas de codigo)
El día 10 de enero de 2009 11:57, Xavier N. [email protected]
escribió:>
Como se quiere la primera ocurrencia necesitamos un modificador “?”:
/(.+?)\n\n/m
Piensa en “foo\n\nbar\n\nbaz”, de ahi queremos “foo”.
Xavier, me interesa mucho esto de sólo recuperar la primera ocurrencia
y me ha sorprendido mucho esto del operador ? ahí utilizado y la
verdad que funciona:
Xavier, me interesa mucho esto de sólo recuperar la primera ocurrencia
y me ha sorprendido mucho esto del operador ? ahà utilizado y la
verdad que funciona:
Exacto, sucede que los cuantificadores hacen matching hasta tan a la
derecha como se pueda. Por ejemplo toma la cadena “xy”:
.* → “xy”
.+ → “xy”
.? → “x”
Ojo que este ultimo es un “?” distinto, es el cuantificador “0 o 1,
pero empieza probando con 1”.
A veces nos interesa que el matching suceda tan a la izquierda como se
pueda (esto es, en la primera ocurrencia posible), y ello se indica
añadiendo un “?” al cuantificador:
.*? → “”
.+? → “x”
.?? → “”
Observa las cadenas vacias. Al poner .* dices “0 o más”, y al pedir
que sea lo más a la izquierda posible con .? el matching más a la
izquierda es justamente el del 0. Si hubiera mas regexp y el resto no
hace matching entonces el backtracking en ese punto iria hacia
adelante, ya que “x” tambien satisface .?.
Como .+ es “1 o mas”, al poner .+? nos quedamos con “x”, que es lo
minimo.
El día 10 de enero de 2009 15:00, Xavier N. [email protected]
escribió:>
A veces nos interesa que el matching suceda tan a la izquierda como se
hace matching entonces el backtracking en ese punto iria hacia
adelante, ya que “x” tambien satisface .*?.
Como .+ es “1 o mas”, al poner .+? nos quedamos con “x”, que es lo minimo.
Genial explicado Xavi… gracias
f.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.