찾다

 >  Q&A  >  본문

정규식 - 일반 그룹 일치를 사용할 때 '\n'과 $n이 다른 이유는 무엇입니까?

예: 첫 번째 그룹을 대문자로 표시하려면:
str = '1abc2aabbcc3aaabbcccc4'
pp str.sub(/(a{2})(b{2})/, '1.upcase2') # =>"1abc2aa.upcasebbcc3aaabbbcc4" 첫 번째 그룹은 왜 대문자로 표시되지 않나요?
pp str.sub(/(a{2})(b{2})/, '1'.upcase '2') # =>"1abc2aabbcc3aaabbbcc4" 이상합니다. upcase()는 여전히 작동하지 않습니다. ! ?
pp str.sub(/(a{2})(b{2})/, $1.upcase '2') # =>"1abc2AAbbcc3aaabbbcc4" upcase()가 작동하려면 '1' 대신 $1을 사용하시겠습니까?

ringa_leeringa_lee2915일 전1096

모든 응답(3)나는 대답할 것이다

  • 我想大声告诉你

    我想大声告诉你2017-04-24 16:01:42

    여기에는 두 가지 문제가 관련됩니다:
    1, '1', 두 역참조의 차이점
    2, 작은따옴표 '와 큰따옴표 "의 미묘한 차이 루비

    내가 '1' 대신에 1를 쓴 것을 알 수 있습니다. 왜냐하면 Ruby에는 1 같은 객체가 없기 때문입니다. 즉, 1만 쓸 수는 없습니다.

    질문 1:

    '1'은 일치 내에서 사용되고 은 일치 외부에서 사용됩니다. 는 기본적으로 전역 변수입니다. 일반 일치가 발생하는 한 Ruby은 이러한 전역 변수를 업데이트합니다. Perl 일반 디자인 '1'은 기본적으로 문자열이지만

    을 일치시킬 때 그룹에 대한 역참조로 사용됩니다.

    그러나 넓은 의미에서 1는 실제로 sed, echo str | sed -E 's,(a{2})(b{2}),21,g'에서 사용되는 것과 같은 일반적인 일반 역참조입니다.

    으아악

    설명: '1'은 일치하는 첫 번째 그룹, 즉 a을 나타내며 이는 a 두 개가 반복됨을 의미합니다.

    그러나 특별한 점은 교체를 수행할 때 '1'을 사용할 수도 있다는 것입니다.

    질문 2:

    대부분의 경우 '"은 동일하게 사용되지만 처리에 차이가 있습니다. 큰따옴표 "1""u0001" 즉, unicode를 입력하는 데 사용됩니다. 문자는 하나의 문자입니다. 작은따옴표 안의 '1'1 두 문자입니다. 위에서 언급했듯이 '1'.upcase 실행 시에는 두 문자에 대해 실행됩니다. . 대문자이지만 Ruby에서는 소문자가 아닌 문자에 대한 #upcase 메서드가 자체적으로 반환됩니다.

    여기에서 의미하는 바를 고려하면 먼저 '1'aa으로 바꾸고 #upcase 메서드를 실행한 다음 원래 문자열을 교체해야 합니다. 내가 아는 한 Ruby가 아니면 이 작업을 수행할 수 없습니다. 레이어가 새로운 구문을 제공합니다. 그렇지 않으면 '1'은 일치하는 그룹에 대한 참조가 변수에 저장된 프로세스가 아닐 것으로 추측됩니다. 🎜 in '..' >인용 문자열로 대체1

    답변:

    • , '1.upcase2', '1'는 각각 '1', aa으로 바뀌고, bb은 변경되지 않습니다. .upcase

    • 이고

      '1'.upcase'1'과 연결됩니다. '2'

    • ,
    • 변수 저장 문자열

      , 대문자 .upcase 'aa'

      회신하다
      0
  • ringa_lee

    ringa_lee2017-04-24 16:01:42

    "1"을 입력해 보세요

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-24 16:01:42

    매개변수가 메소드에 전달되면 매개변수가 먼저 계산된 다음 결과가 메소드에 전달됩니다.

    회신하다
    0
  • 취소회신하다