红宝石正则表达式和分组

时间:2011-09-01 20:47:35

标签: ruby regex

我有以下文字'some-text-here'并尝试使用群组获取'text'字词。

如果我使用该表达式/some-(\w+)-here/一切正常,但如果我尝试对其应用分组/some-(?<group_name>\w+)-here/则会引发错误Undefined (?...) sequence.

我做错了什么?

(Ruby 1.9.2)

更新:对我感到羞耻。这完全取决于我的经营权。是的,我使用RVM,我的ruby版本打开了1.9.2。但是我在http://rubular.com/测试了那个表达式,它在页脚Rubular runs on Ruby 1.8.7处写出来。 Ruby 1.8.7和Ruby 1.9.2有一个不同的正则表达式引擎。 所以我的表达在1.9.2上工作,但

3 个答案:

答案 0 :(得分:10)

对我来说,看起来你正在看错了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

答案 1 :(得分:1)

很抱歉挖掘这个,但我的客户端有ruby 1.8.7,我需要使用使用组的正则表达式替换文本。

有没有办法用ruby 1.8.7做到这一点?

答案 2 :(得分:0)

这些是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"