2015-01-03 2 views
0

/((\w)\2)/ 반복되는 문자를 찾습니다. 두 번째 캡처 그룹과 일치하는 문자를 무시하여 생성 된 2 차원 배열을 피하기를 바랬다 : /((?:\w)\2)/. 그것은 불가능한 것 같습니다. 어떤 아이디어?패턴을 반복하는 데 사용되는 Regex의 캡처 그룹을 무시합니다.

Rubular example

+1

질문에 "최근 질문"에 대한 링크를 추가 할 수 있습니까? –

+1

질문 자체가 혼자 있습니다. 이 질문을 이해하기 위해 독자가 다른 질문이나 다른 웹 사이트를 참조하도록하지 마십시오. 정규 표현식은 2 차원 배열을 반환하지 않습니다. 사실, 아무 것도하지 않습니다. 정규식을 사용하는 방법은 어떤 것을 반환 할 수 있습니다. – sawa

+0

감사합니다. @와! 다음 번에 돌봐 줄거야! –

답변

1

당신은 필요가 없습니다 어떤 캡처 그룹을 :

str = [*'a+'..'z+', *'A+'..'Z+', *'0+'..'9+', '_+'].join('|') 
    #=> "a+|b+| ... |z+|A+|B+| ... |Z+|0+|1+| ... |9+|_+" 

"aaabbcddd".scan(/#{str}/) 
    #=> ["aaa", "bb", "c", "ddd"] 

1 개가 있어야한다고 주장하는 경우 :

"aaabbcddd".scan(/(#{str})/).flatten(1) 
    #=> ["aaa", "bb", "c", "ddd"] 

이 속임수인가요? 당신은 그것이 가능한지 묻습니다..

+0

그래,하지만 멋 있었어 :) –

0

당신이 String#scan을 사용하는 것을 의미하는 경우 결과 첫 번째 항목 Enumerable#map 반환 사후 처리 할 수 ​​있습니다

'helloo'.scan(/((\w)\2)/) 
# => [["ll", "l"], ["oo", "o"]] 

'helloo'.scan(/((\w)\2)/).map { |m| m[0] } 
# => ["ll", "oo"] 
관련 문제