在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
的英语扩展名。