2012-10-08 2 views
1

다음 상황에서 정확히 row[/\w+/] 행은 무엇입니까?이 코드에서 [/ w + /] 행의 목적은 무엇입니까?

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

제가 첫번째 값 로부터 제거 이해, 그 값을 모든 블록에 전달하고, 블록으로부터 리턴 값으로 교체된다. 그런데 [/\w+/]은 무엇을하고 있습니까? 이 경우 각 행은 영숫자 문자열의 배열입니다.

답변

3

문자열 인덱스 연산자 []이 어떻게 작동하는지 알 수 있습니다. here.

예를 들어 숫자 (row[5])를 전달하면 위치 5 (0이 첫 번째 임)에 문자가 포함 된 하위 문자열이 반환됩니다. 그러나 숫자 대신 정규식을 사용하면 정규식과 일치하는 첫 번째 하위 문자열을 반환합니다. 정규 표현식은 하나 개 이상의 단어를 문자 A-Z, A-Z, 0-9 일치되고 특히이 경우

및 _

"abcd efg hij"[/w+/] #=> "abcd" 
"abcd_efg hij"[/w+/] #=> "abcd_efg" 
3

두 개의 슬래시 사이의 값은 regular expression입니다. 이 경우 \w은 모든 단어 문자 (A-Z, a-z, 0-9_)와 일치하고 +은 1 자 이상을 나타냅니다. 따라서이 코드는 주어진 문자열에서 단어가 처음 나오는 것을 찾아서 나머지는 버립니다.

+0

감사합니다. 나는 그것이 정규식이라는 것을 깨달았다. 그래서 그것은 공백이나 밑줄 뒤에 어떤 것을 거부 할 것입니까? – Undistraction

+1

\ w는 밑줄과 일치합니다. –

+0

@FrederickCheung 감사합니다. – Undistraction

관련 문제