row[/\w+/]
行在以下情况下究竟做了什么?
fields = rows.shift.map{ |row|
row[/\w+/]
}
我知道第一个值是从行中删除的,它的值都被传递到块中,并被块返回的值替换。但[/\w+/]
对价值做了什么?在这种情况下,每一行都是一个字母数字字符串数组。
答案 0 :(得分:3)
两个斜杠之间的任何内容都是regular expression。在这种情况下,\w
匹配任何字词(A-Z
,a-z
,0-9
和_
),+
表示1个或多个字符。因此,此代码将在给定字符串中找到第一个单词并丢弃其余单词。
答案 1 :(得分:3)
您可以看到字符串索引运算符[]
如何工作here。
例如,如果传递一个数字(row[5]
),它将返回一个包含位置5(0为第一个)的字符的子字符串。但是当使用正则表达式而不是数字时,它将返回与正则表达式匹配的第一个子字符串。
在这种特殊情况下,正则表达式匹配一个或多个单词字符A-Z,a-z,0-9和_
"abcd efg hij"[/w+/] #=> "abcd"
"abcd_efg hij"[/w+/] #=> "abcd_efg"