在Ruby的情况下使用带有正则表达式匹配的命名Captures ......什么时候?

时间:2012-03-09 22:46:47

标签: ruby regex switch-statement capture

我想使用命名捕获来解析用户输入以提高可读性。

当他们输入命令时,我想捕获一些参数并传递它们。我在案例陈述中使用了RegExps,因此我无法指定/pattern/.named_captures的回报。

以下是我希望能够做到的事情(例如):

while command != "quit"
  print "Command: "
  command = gets.chomp
  case command
  when /load (?<filename>\w+)/
    load(filename)
  end
end

2 个答案:

答案 0 :(得分:14)

命名捕获在此语法时设置局部变量。

regex-literal =~ string

不要设置其他语法。 #见rdoc(re.c)

regex-variable =~ string

string =~ regex

regex.match(string)

case string
when regex
else
end

我也喜欢命名捕获,但我不喜欢这种行为。 现在,我们必须使用$〜以防语法。

case string
when /(?<name>.)/
  $~[:name]
else
end

答案 1 :(得分:7)

这很难看,但在Ruby 1.9.3中对我有用:

while command != "quit"
  print "Command: "
  command = gets.chomp
  case command
  when /load (?<filename>\w+)/
    load($~[:filename])
  end
end

或者,您可以使用$~$LAST_MATCH_INFO的英文扩展名。

相关问题