2013-04-05 3 views
16

내가Ruby 정규식은 일치하는 것을 저장합니까?

.gsub(/matchthisregex/,"replace_with_this") 

이 어딘가에 정규식과 일치하는 것을 저장 GSUB 않는 사용하는 경우? 대체 문자열에서 일치하는 것을 사용하고 싶습니다. 내 위의 예에서

"replace_with_" + matchedregexstring + "this" 

같은 예를 들어 뭔가를 들어 matchedregexstring는 GSUB에서 저장된 일치하는 것 어디? 죄송합니다. 혼란 스럽다면, 그 단어를 어떻게 말할 지 모르겠습니다. fine manual 가입일

답변

29

:가 String이다

여분 경우는 검색된 텍스트로 대체한다. 패턴이 \d 인 패턴의 캡처 그룹에 대한 역 참조를 포함 할 수 있습니다. d은 그룹 번호이거나 \k<n>입니다. 여기서 n은 그룹 이름입니다. 큰 따옴표로 묶인 문자열 인 경우 두 개의 역 참조 앞에 추가 백 슬래시가 와야합니다. 그러나 대체 내에서 &$과 같은 특수 일치 변수는 현재 일치를 참조하지 않습니다.
는 [...] 블록 형태
은 현재 검색 문자열을 파라미터로 전달되며, 이러한 변수 $1, $2, $ ', $&$'로 적절히 설정된다. 블록이 반환 한 값은 각 호출에서 일치 항목으로 대체됩니다.

당신이 캡처 그룹에 대해 걱정하지 않는다 (즉, 정규 표현식에서 (expr) 같은 것들) 다음 블록 형태와 $& 사용할 수있는 경우는 다음 캡처 그룹을 수행 할 수 있습니다이있는 경우

>> 'where is pancakes house?'.gsub(/is/) { "-#{$&}-" } 
=> "where -is- pancakes house?" 

을 대체 문자열에서 \n을 사용

>> 'where is pancakes house?'.gsub(/(is)/, '-\1-') 
=> "where -is- pancakes house?" 

또는 $n을 블록에 : ​​

모든 경기를 기록 할 경우

my_string.gsub(my_regexp){ Regexp.last_match.inspect } 

는, 그것을 좀 더 실제적인 예제를 제공하려면 :

>> 'where is pancakes house?'.gsub(/(is)/) { "-#{$1}-" } 
=> "where -is- pancakes house?" 
+0

아하! 따라서 문서에 나타나는 여분의'\ '는 Rdoc의 인공물입니다. 나는 그들이 의미하는 바를 알아 내려고 노력하면서 머리를 긁적 거렸다. – matt

+0

@matt : 여분의 백 슬래시를 의미합니까? # * & # $ Markdown, 내 $ -backtick 변수를 보면 더 재미있을 것이다. :) 예, 큰 따옴표를 사용하는 경우'\\ 1 '을 사용해야하지만 작은 따옴표를 사용하면'\ 1'이 좋습니다. 나는 보간이 필요하지 않으면 항상한다.) –

+2

예,'''\'''not''. 나는 눈치 채지 못했다. 나는 코멘트가 때때로 미리보기로 할 수 있다고 생각한다. – matt

1

나는 GSUB의 경기가 실제로이 같은 Regexp.last_match 변수 (클래스 MatchData)를 통해 액세스 할 수있는 here 발견 다음과 같이 사용할 수 있습니다 :

"Hello world".gsub(/(\w+)/) { Regexp.last_match.captures.each{ |match| Rails.logger.info "FOUND: #{match}"} } 

#Rails log: 
FOUND: Hello 
FOUND: world 

을 특정 경우에, 당신은 이런 식으로 뭔가를 할 수 :

,536을
mystring.gsub(/(matchthisregex)/){ mystring = "replace_with_#{Regexp.last_match[0].to_s}this"} 
3

모든 루비 버전 : 일치하는 문자열을 얻는 간단한 방법.

.gsub(/matched_sym/) {|sym| "-#{sym}-"}