2014-02-25 5 views
1

사람이 설명 할 수 이유 :

str = "hi there\r\n\r\nfoo bar" 

rgx = /hi there$/ 
str.match rgx # => nil 

rgx = /hi there\s*$/ 
str.match rgx # => #<MatchData "hi there\r\n\r"> 

을가 \r 일치하지 않는 $ 것 같아 한편으로는. 그러나 처음에 \r을 포함하는 모든 공백을 캡처하면 이 갑자기 두 번째 \r과 일치하는 것으로 나타나고 후행 "\nfoo bar"을 계속 포착하지 않습니다.

연속적인 \r\n 시퀀스에 대한 특별한 규칙이 있습니까? $의 문서는 단순히이 동작을 설명하지 않는 "end of line"과 일치한다고 말합니다.

답변

4

$은 제로 너비 어설 션입니다. 어떤 문자와도 일치하지 않으며 위치의에 일치합니다. 즉, \n 직전 또는 문자열 끝에 일치합니다.

/hi there\s*$/ 일치 \s*$ 번째 \n 전에 위치에 일치시킬 수 "\r\n\r"과 일치하기 때문이다. $도 첫 번째 \n 앞에 위치 할 수 있지만 \s*은 가능한 한 많이 일치하지만 전체 정규식을 허용합니다.

+0

하단 라인 문제 : puts 및 다른 것들이 표시 목적으로 줄 바꿈으로 함께 이해 되더라도 \ r은 $와 일치하지 않으며 "\ r \ n"입니다. – eagspoo

관련 문제