2010-07-02 4 views
0

다른 구조를 가질 수있는 입력이 있습니다. 몇 가지 패턴을 테스트하고 정규 표현식을 반복하지 않고 해당하는 일치하는 부분을 얻고 싶습니다. 예 :어떻게하면 정규 표현식을 테스트하고 루비에서 일치하는 부분을 가져올 수 있습니까?

a = "hello123" 
case a 
when /^([0-9]+)([a-z]+)$/ 
    # how to get matching values? 
when /^([a-z]+)([0-9]+)$/ 
    # how to get matching values? 
else 
end 

매우 간단한 예이며 코드는 좀 더 복잡합니다.

답변

3

사용 $~

a = "hello123" 
case a 
when /^([0-9]+)([a-z]+)$/ 
    print $~ 
when /^([a-z]+)([0-9]+)$/ 
    print $~ 
else 
end 

MatchData 개체를 인쇄 할 수 있습니다. (MatchData는 특별한 변수 $ ~의 타입이며, Regexp # match와 Regexp # last_match에 의해 반환 된 객체의 타입입니다. 패턴 일치의 모든 결과를 캡슐화합니다. 특수한 변수 $ &, $ '$', $ 1, $ 2 (more about special vars) 등등. Matchdata도 MatchingData로 알려져있다.)

http://ruby-doc.org/core/classes/Regexp.html#M001202

2
a = "hello123" 
case a 
when /^([0-9]+)([a-z]+)$/ 
    # how to get matching values? 
    puts [$~, $1, $2] 
when /^([a-z]+)([0-9]+)$/ 
    print "regex 2 matched " 
    p [$1, $2]     # => ["hello", "123"] 
    p $~.to_a      # => ["hello123", "hello", "123"] 
else 
end 
+0

이 Gishu을 주셔서 감사합니다 – Andrei

관련 문제