我正在尝试将我的正则表达式匹配的命名组分配给局部变量。例如,我正在尝试捕获日期输入的字符串,并将命名组month
和day
称为局部变量:
input = "2015-01-24"
expr = /\d{4}-(?<month>\d{2})-(?<day>\d{2})/
input =~ expr #=> 0
但是,匹配后month
或day
是未定义的变量。如何将month
和day
作为本地变量访问?
根据Ruby doc,键入组变量名称将返回捕获的值(在此示例中为“dollar”)
/\$(?<dollars>\d+)\.(?<cents>\d+)/ =~ "$3.67" #=> 0
dollars #=> "3"
我也很欣赏任何推荐的资源。
答案 0 :(得分:4)
仔细阅读您引用的文件:
当命名捕获组与表达式左侧的文字正则表达式和=〜运算符一起使用时,捕获的文本也会分配给具有相应名称的局部变量。
您的代码:
input =~ expr
并未在两个方面对此进行确认:(1)expr
不是文字正则表达式,而是分配给变量的正则表达式,(2)右侧有正则表达式。
如果您遵循该文档,则可以将捕获称为局部变量。