Рубиновое регулярное выражение и группировка
У меня есть текст '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
Ответы
Ответ 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"