2009-12-13 3 views
18

string.sub은 첫 번째 인스턴스 만 바꾸는 것처럼 보입니다. 모든 패턴을 대체 할 수있는 옵션 또는 다른 옵션이 있습니까? Perl과 같은 정규 표현식에서 사용할 수 있습니까?루비에서 패턴의 모든 인스턴스를 대체하려면 어떻게해야합니까?

... 그리고 하나 말해 줄 수있는 사람을 도대체 왜 string.sub 그냥 첫 경기가 대체됩니까 (I는 R/ㅋ/ㅋ 같은 것이/생각)?

+1

를 같은 이유로 그 Perl은 전역 대체를 만들기 위해'g' 한정자가 필요합니다. 모든 것을 대치하면 항상 원하는 것이지만 항상 그런 것은 아닙니다. – Telemachus

답변

48

String.gsub 트릭을해야합니다.

인용 문서 :

gsub(pattern, replacement) → new_str

가 두 번째 인수를 대체 패턴 의 모든 발생과 STR의 카피를 돌려줍니다. 패턴은 일반적으로 Regexp입니다. 문자열로 주어지면 정규 표현식 메타 문자가 포함 된 이 문자 그대로 해석됩니다. \\d은 백래시와 일치하며 그 다음 숫자는 d입니다.

+4

w00t. 감사. 당신은 sub가 디폴트로 그것을 할 것이고, 첫번째 N 개의 어커런스를 대체하기위한 int param을 가질 것이라고 생각할 것입니다! – DJTripleThreat

+4

DJ : 아니겠습니까? 첫 번째 경기를 바꾸려면 ** SUB ** stitute를 선택하십시오. ** G ** lobal ** SUB ** stitute가 선택 사항입니다. –

+0

자세한 내용은 [매뉴얼 페이지] (http://www.ruby-doc.org/core-2.1.1/String.html#method-i-gsub)를 참조하십시오. –

5

sub 그냥 패턴의 첫 번째 일치를 대체 내가 왜 설명 할 수 있지만이 문서 (명령 행에서 ri String#sub에서) 훨씬 더 잘 수행 생각 :

str.sub(pattern, replacement)   => new_str 
str.sub(pattern) {|match| block }  => new_str 

Returns a copy of _str_ with the _first_ occurrence of _pattern_ 
replaced with either _replacement_ or the value of the block. 
+4

와우, 나는 루비와 레일을 오랫동안 사용해 왔습니다. 오늘은 게시물 때문에 # 리터를 입력 한 첫 번째 시간이었습니다. 나는 거기에 그 기능이 있다는 것을 몰랐다! 용어를 검색하고 문서를 그런 식으로 찾았습니다. –

관련 문제