如何将正则表达式中的命名组分配给局部变量

wri*_*mus 1 ruby regex capturing-group

我试图将我的正则表达式匹配的命名组分配给局部变量。例如,我试图捕获日期输入的字符串并引用命名组monthday局部变量:

input = "2015-01-24" 
expr = /\d{4}-(?<month>\d{2})-(?<day>\d{2})/ 
input =~ expr #=> 0
Run Code Online (Sandbox Code Playgroud)

但是,month或者day是匹配后未定义的变量。我如何访问monthday作为局部变量?

根据Ruby doc,输入组变量名称将返回捕获的值(在本例中为“美元”)

/\$(?<dollars>\d+)\.(?<cents>\d+)/ =~ "$3.67" #=> 0 
dollars #=> "3"
Run Code Online (Sandbox Code Playgroud)

我也很感激任何推荐的资源。

saw*_*awa 6

更仔细地阅读您引用的文档:

当命名捕获组与表达式左侧的文字正则表达式和 =~ 运算符一起使用时,捕获的文本也会分配给具有相应名称的局部变量。

您的代码:

input =~ expr
Run Code Online (Sandbox Code Playgroud)

没有在两个方面证实这一点:(1)expr不是文字正则表达式,而是分配给变量的正则表达式,(2)右侧有正则表达式。

如果您遵循文档,那么您可以将捕获称为局部变量。