Подтвердить что ты не робот

Рубиновое регулярное выражение и группировка

У меня есть текст 'some-text-here' и пытаюсь получить от него слово 'text', используя группы.

Если я использую это выражение /some-(\w+)-here/, все работает нормально, но если я попытаюсь применить к нему группировку /some-(?<group_name>\w+)-here/, он вызывает ошибку Undefined (?...) sequence.

Что я делаю неправильно?

(Ruby 1.9.2)

Обновление: позор мне. Все это от моей врожденности. Да, я использую RVM, а моя рубиновая версия - 1.9.2. Но я тестировал это выражение на http://rubular.com/, где он написан на нижнем колонтитуле Rubular runs on Ruby 1.8.7. Ruby 1.8.7 и Ruby 1.9.2 имеют разные механизмы регулярных выражений. Итак, мое выражение работает на 1.9.2, но не на 1.8.7

4b9b3361

Ответ 1

Для меня это похоже на то, что вы смотрите на неправильный Ruby. Возможно, вы установили 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

Ответ 2

Извините, что разобрал это, но мой клиент имеет ruby ​​1.8.7, и мне нужно заменить текст с помощью регулярного выражения, которое использует группы.

Есть ли способ сделать это с ruby ​​1.8.7?

Ответ 3

Это мои результаты с 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"