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

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

当他们键入命令时,我想捕获一些参数并传递它们。 我在case语句中使用RegExps,因此我无法分配/pattern/.named_captures的返回/pattern/.named_captures

这是我希望能够做到的(例如):

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

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

 regex-literal =~ string 

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

 regex-variable =~ string string =~ regex regex.match(string) case string when regex else end 

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

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

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

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

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

Interesting Posts