2013-02-26 2 views
-1

Ruby에서 일치시키기위한 몇 가지 옵션을 시도했는데 matchscan이 다른 결과를 반환하기 때문에 결과에 혼란스러워했습니다. 내가 matchscan 같은 결과를 반환하지만하지 않았다 것으로 예상일치 및 검색이 동일한 정규식에 대해 다른 결과를 반환하는 이유는 무엇입니까?

s ="C:\Users\rdo\AppData\Local\Temp/ccqZSpeQ.o: In function `main':\r\nmain.c:(.text+0x8): undefined reference to `some_function'" 

%r[([\w\.\/]+):(.+)].match(s) 
# => #<MatchData "C:Users\rdoAppDataLocalTemp/ccqZSpeQ.o: In function `main':\r" 1:"C" 2:"Users\rdoAppDataLocalTemp/ccqZSpeQ.o: In function `main':\r"> 

s.scan(/([\w\.\/]+):(.+)/) 
# => [["C", "Users\rdoAppDataLocalTemp/ccqZSpeQ.o: In function `main':\r"], ["main.c", "(.text+0x8): undefined reference to `some_function'"]] 

:이 예입니다. 왜 그 이유를 설명 할 수 있습니까?

+3

여기에 혼란이 있습니까? 그들은 다른 일을하고 다른 일을하는 다른 방법입니다. 문서는 각각의 기능에 대해 매우 명확합니다. –

+0

실제로'match '가 단지 하나의 부분이나 표현과 일치하는 이유를 이해하지 못합니까? – rdo

답변

0

matchscan은 전혀 다른 방식으로 완전히 다른 결과를 반환하는 완전히 다른 방법입니다.

match은 문자열에 정규 표현식을 적용한 결과, 일치 된 항목, 시작 및 길이, 일치하는 패턴 섹션을 알려줍니다.

scan은 문자열에 정규 표현식을 적용하고 캡처 된 모든 결과 문자열 배열을 반환합니다.

+0

는 PHP에서'preg_match'의 아날로그와 '일치'합니까? – rdo

관련 문제