expresiones regulares ruby
Regresar el primer partido de Ruby regex (5)
Podría intentar variableName[/regular expression/]
. Este es un resultado de ejemplo de irb:
irb(main):003:0> names = "erik kalle johan anders erik kalle johan anders"
=> "erik kalle johan anders erik kalle johan anders"
irb(main):004:0> names[/kalle/]
=> "kalle"
Estoy buscando una forma de realizar una coincidencia de expresiones regulares en una cadena en Ruby y tener un cortocircuito en el primer partido.
La cadena que estoy procesando es larga y, por lo que parece, la forma estándar (método de match
) procesará todo, recopilará cada coincidencia y devolverá un objeto MatchData que contenga todas las coincidencias.
match = string.match(/regex/)[0].to_s
Puede usar []
: (que es como una match
)
"[email protected]"[//+([^@]+)/, 1] # matches what is inside ()
# => "account2"
"[email protected]"[//+([^@]+)/, 0] # matches whole regexp
# => "+account2"
Si solo la existencia de un partido es importante, puede ir con
/regexp/ =~ "string"
De cualquier forma, la match
solo debe devolver el primer acierto, mientras que el scan
busca en toda la cadena. Por lo tanto si
matchData = "string string".match(/string/)
matchData[0] # => "string"
matchData[1] # => nil - it''s the first capture group not a second match
Todavía no estoy seguro de si esta característica es increíble o simplemente una locura, pero su expresión regular puede definir variables locales.
//$(?<dollars>/d+)/.(?<cents>/d+)/ =~ "$3.67" #=> 0
dollars #=> "3"
(Tomado de http://ruby-doc.org/core-2.1.1/Regexp.html ).
Una expresión regular (regex) no es más que una máquina de estados finitos (FSM).
Un FSM intenta responder la pregunta "¿Es posible o no este estado?"
Sigue intentando hacer coincidir un patrón hasta que se encuentre una coincidencia (éxito) o hasta que se exploren todas las rutas y no se encuentre ninguna coincidencia (error).
En caso de éxito, la pregunta "¿Es posible o no este estado?" ha sido respondido con un "sí". Por lo tanto, no es necesario hacer más coincidencias y la expresión regular regresa.
Vea this y this para más información sobre esto.
Además: aquí hay un ejemplo interesante para demostrar cómo funciona Regex. Aquí, una expresión regular se usa para detectar si un número de entrega es primo. Este ejemplo está en perl, pero también puede escribirse en ruby.