这段代码中行[/ \ w + /]的目的是什么?

时间:2012-10-08 18:09:27

标签: ruby arrays ruby-on-rails-3 map block

row[/\w+/]行在以下情况下究竟做了什么?

fields = rows.shift.map{ |row| 
  row[/\w+/]
}

我知道第一个值是从中删除的,它的值都被传递到块中,并被块返回的值替换。但[/\w+/]对价值做了什么?在这种情况下,每一行都是一个字母数字字符串数组。

2 个答案:

答案 0 :(得分:3)

两个斜杠之间的任何内容都是regular expression。在这种情况下,\w匹配任何字词(A-Za-z0-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"