2011-09-01 23 views
10

Tengo el siguiente texto 'some-text-here' y trato de obtener la palabra 'text' utilizando grupos.rubí regex y agrupación

Si utilizo esa expresión /some-(\w+)-here/ todo funciona bien, pero si trato de aplicar la agrupación a que /some-(?<group_name>\w+)-here/ es generar un error Undefined (?...) sequence.

¿Qué está haciendo mal?

(Rubí 1.9.2)

UPD: la culpa es mía. Es todo por mi innatación. Sí, uso RVM y mi versión de ruby ​​activada 1.9.2. Pero probé esa expresión en http://rubular.com/, donde está escrita en el pie de página Rubular runs on Ruby 1.8.7. Ruby 1.8.7 y Ruby 1.9.2 tienen un motor de expresiones regulares diferente. Así que mi expresión funciona en 1.9.2, pero no se en 1.8.7

+5

Funciona en mi Ruby 1.9.2 muy bien. ¿Estás seguro de que estás en esta versión? –

Respuesta

10

Para mí que parece que busca en el mal Rubí. ¿Quizás tengas RVM instalado?

1.9.2

>> RUBY_VERSION 
=> "1.9.2" 
>> s='some-text-here' 
=> "some-text-here" 
>> /some-(?<group_name>\w+)-here/ =~ s 
=> 0 
>> group_name #=> "text" 

1.8.7

>> RUBY_VERSION 
=> "1.8.7" 
>> s='some-text-here' 
=> "some-text-here" 
>> /some-(?<group_name>\w+)-here/ =~ s 
SyntaxError: compile error 
(irb):2: undefined (?...) sequence: /some-(?<group_name>\w+)-here/ 
    from (irb):2 
+0

me pones a pensar en la diferencia entre versiones. Gracias – ck3g

0

Estos son mis resultados con 1.9.2-p290:

irb(main):004:0> "some-text-here".match(/some-(?<test>\w+)-here/) 
=> #<MatchData "some-text-here" test:"text"> 
irb(main):005:0> RUBY_VERSION 
=> "1.9.2" 
1

sentimos que cavar esto, pero mi cliente tiene rubí 1.8.7 y tengo que reemplazar texto usando expresiones regulares que utiliza grupos.

¿Hay alguna manera de hacer esto con ruby ​​1.8.7?

+1

Puede utilizar [last_match] (http://apidock.com/ruby/v1_8_7_330/Regexp/last_match/class) o el valor de retorno de [match] (http://apidock.com/ruby/v1_8_7_330/Regexp/coincidencia). También se establecen algunas variables globales. Ver [MatchData] (http://apidock.com/ruby/v1_8_7_72/MatchData) para esto. – webwurst

+0

Gracias por tu comentario. Me olvidé de esta publicación. Es bueno para referencias futuras porque muchos de estos hilos tienen una puntuación realmente alta en google. – HMR