2017-11-28 3 views
1

나는 gsub 설명서를 검토 :정규 표현식의 캡처 된 그룹이 일치하는 문자열 이상입니까?

두 번째 인수에 대해 교체 패턴의 모든 항목에 캐릭터 라인의 카피를 돌려줍니다. 블록 형태

은 현재 검색 문자열은 매개 변수로 전달되며, 이러한 $ 1, $ 2 $ ', $ & 및 $ 같은 변수는'적절 설정한다. 블록이 반환 한 값은 각 호출에서 일치하는 으로 대체됩니다.

나는이 예제를 가지고 :

"new-york".gsub(/(-|\A)./) do |m| 
    m #=> "n", "-y" 
    m[-1].upcase 
end 
#=> "NewYork" 

m 하이픈 또는 시작 문자 중 하나입니다 캡처 한 그룹. 시작 문자는 "n"입니다. 다른 캡처 된 항목은 하이픈 "-"이어야합니다. 출력은 "-"이 아닌 "-y"입니다. "y"은 하이픈 또는 시작 문자가 아닙니다. 캡쳐 된 이유는 무엇입니까?

+1

용어 _match_ 및 _capture_는 정규 표현식에서 다른 의미를 가지므로 사용 방법에주의하십시오. 또한'\ A'는 문자가 아닙니다. '/ - | \ A. /'는 하이픈 또는 시작 문자와 일치합니다. –

+0

@SagarPandya OP에는'/ (- | \ A) ./'이 있으며, 그렇지 않습니다. '/ - | \ A. /'. – sawa

+0

@sawa 나는 어떤 정규 표현식을 써서 OP가 "정규 표현식에서 하이픈이나 시작 문자 중 하나입니다. ". –

답변

5

(첫 번째) 캡처 된 그룹은 정규식 (-|\A)에있는 (첫 번째) 괄호 쌍에 해당하며 "" 또는 "-"입니다. 이것은 $1입니다. \A은 위치가 아니며 문자가 아닙니다. "n"이 아니지만 "n" 바로 앞에 빈 문자열 ""이 있습니다.

일치 항목은 전체 정규식 (-|\A).에 해당하며 "n" 또는 "-y"입니다. 이것은 m입니다.

+0

다른 방법으로 묻습니다. 왜 이걸 돌려주지 않는거야? 'new-york'.scan (/ - | \ A. /) # => [ "n", "-"] => [ "n", "-"] – Donato

+1

정규 표현식의'-' 옵션은''-''과 일치합니다. – sawa

+0

이제 이해가됩니다. \ A는 첫 번째 문자 앞의 위치를 ​​나타냅니다. 그리고 정규 표현식은 \ A와. 문자 (줄 바꿈을 제외한 모든 문자)는 ""(첫 번째 문자 앞의 위치) 및 "n"(다음 문자)과 일치합니다. 이것은 "n"으로 반환됩니다. 같은 로직이 "-y"를 얻기 위해 사용됩니다. – Donato