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

时间:2015-01-25 05:21:50

标签: ruby regex capturing-group

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

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

但是,匹配后monthday是未定义的变量。如何将monthday作为本地变量访问?

根据Ruby doc,键入组变量名称将返回捕获的值(在此示例中为“dollar”)

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

我也很欣赏任何推荐的资源。

1 个答案:

答案 0 :(得分:4)

仔细阅读您引用的文件:

  

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

您的代码:

input =~ expr

并未在两个方面对此进行确认:(1)expr不是文字正则表达式,而是分配给变量的正则表达式,(2)右侧有正则表达式。

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