2011-09-01 20 views
10

Mam następujący tekst 'some-text-here' i staram się uzyskać z niego słowo 'text' używając grup.regex ruby ​​i grupowanie

Jeśli użyję że ekspresja /some-(\w+)-here/ wszystko działa poprawnie, ale gdy próbuję zastosować zgrupowanie do niego /some-(?<group_name>\w+)-here/ to podnieść błąd Undefined (?...) sequence.

Co robię źle?

(Ruby 1.9.2)

Aktualizacja: wstyd mi. To wszystko z mojego poczucia winy. Tak, używam RVM i moja wersja ruby ​​1.9.2. Ale przetestowałem to wyrażenie pod adresem http://rubular.com/, gdzie jest napisane w stopce Rubular runs on Ruby 1.8.7. Ruby 1.8.7 i Ruby 1.9.2 mają inny mechanizm wyrażeń regularnych. Więc moja ekspresja działa na 1.9.2, ale nie robi na 1.8.7

+5

Działa na moim Ruby 1.9.2 w porządku. Jesteś pewien, że korzystasz z tej wersji? –

Odpowiedz

10

Dla mnie to wygląda jak szukasz w złym Rubin. Czy masz zainstalowaną maszynę 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

kazałeś mi myśleć o różnicy między wersjami. Dziękujemy – ck3g

0

Oto moje wyniki z 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

Niestety kopać tę górę, ale mój klient ma Ruby 1.8.7 i muszę wymienić tekstu za pomocą wyrażenia regularnego, który używa grup.

Czy istnieje sposób, aby to zrobić z ruby ​​1.8.7?

+1

Możesz skorzystać z [last_match] (http://apidock.com/ruby/v1_8_7_330/Regexp/last_match/class) lub zwracanej wartości [match] (http://apidock.com/ruby/v1_8_7_330/Regexp/match). Ustawiane są również niektóre zmienne globalne. Zobacz [MatchData] (http://apidock.com/ruby/v1_8_7_72/MatchData) na ten temat. – webwurst

+0

Dziękuję za komentarz. Zapomniałem o tym wpisie. To jest dobre dla przyszłego odniesienia, ponieważ wiele z tych wątków osiąga naprawdę wysokie wyniki w google. – HMR