2011-09-01 18 views
10

Ho il seguente testo 'some-text-here' e provo a ottenere la parola 'text' utilizzando i gruppi.ruby ​​regex e raggruppamento

Se io uso questa espressione /some-(\w+)-here/ tutto funziona bene, ma se cerco di applicare ad esso il raggruppamento /some-(?<group_name>\w+)-here/ è generare un errore Undefined (?...) sequence.

Cosa faccio di sbagliato?

(Rubino 1.9.2)

Upd: vergogna su di me. È tutto dalla mia innatention. Sì, ho usato RVM e la mia versione ruby ​​attivata 1.9.2. Ma ho provato quell'espressione a http://rubular.com/ dove è scritta al footer Rubular runs on Ruby 1.8.7. Ruby 1.8.7 e Ruby 1.9.2 hanno un motore di espressioni regolari diverso. Quindi la mia espressione lavora su 1.9.2, ma non si sulla 1.8.7

+5

Funziona perfettamente con Ruby 1.9.2. Sei sicuro di essere su questa versione? –

risposta

10

Per me che assomiglia si sta guardando dalla parte del torto Rubino. Hai forse installato RVM?

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

mi hai fatto pensare alla differenza tra le versioni. Grazie – ck3g

0

Questi sono i miei risultati 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

Siamo spiacenti per scavare questo in su ma il mio cliente ha ruby ​​1.8.7 e ho bisogno di sostituire il testo utilizzando espressioni regolari che utilizza i gruppi.

C'è un modo per farlo con Ruby 1.8.7?

+1

Puoi utilizzare [last_match] (http://apidock.com/ruby/v1_8_7_330/Regexp/last_match/class) o il valore restituito di [corrispondenza] (http://apidock.com/ruby/v1_8_7_330/Regexp/partita). Sono anche impostate alcune variabili globali. Vedi [MatchData] (http://apidock.com/ruby/v1_8_7_72/MatchData) per questo. – webwurst

+0

Grazie per il tuo commento. Ho dimenticato di questo post. Va bene per riferimento futuro, perché molti di questi thread punteggio davvero alto su google. – HMR