2012-07-06 2 views
0

루비를 처음 접했습니다. 나는 문자열을 구문 분석하고 정규식으로 여러 변수를 할당하려고합니다.Ruby Regex Match 단일 문자열에서 여러 변수 일치

나는 Google 문서를 참조하고 조금 씩 인터넷에 올랐으며 다음과 같이 작동하는지 확인했다.

@operating_system, @os_update, @os_arch = @version_line[0].match(
     /(Solaris \d+)\s+\d+\/\d+\ss\d+[sx]_u(\d+)\wos_\d+\w+\s+(\w+)$/ 
     ) 

@version_line = [" Oracle Solaris 10 9/10 s10x_u9wos_14a X86\n"]

하지만 내 첫번째 변수가 일어나는 모두가 @operating_system는 Solaris 10 9/10 s10x_u9wos_14a X86

내가 길을 잘못 할 노력하고 있어요 할당되는 경우?

답변

1

사실, match가 표시되는 문자열을 생산하는 to_s 방법이 일어나는 MatchData 객체를 반환합니다.

는 배열로 일치하는 모든 캡처 그룹을 얻을 captures 방법을 사용하려면 나를 위해 작동 match`

@operating_system, @os_update, @os_arch = @version_line[0].match(
     /(Solaris \d+)\s+\d+\/\d+\ss\d+[sx]_u(\d+)\wos_\d+\w+\s+(\w+)$/ 
     ).captures 
+0

이상한 ...'문자열 #을. 1.8.7은 물론 1.9.1 및 1.9.3에 해당합니다. –

+0

Brilliant! 고마워 토마스 나는 MatchData 객체를 반환한다는 사실을 완전히 놓쳤다! – Sirch

+0

당신은 @version_line = [ "..."]에 대해 옳았습니다. 제 질문을 수정하겠습니다. – Sirch

0

사용이 정규식 (Solaris \d+)\s+\d+/\d+\s\w+\s\w+