> 백엔드 개발 > Golang > 캡처 그룹 \'1W\'가 정규식에 정의되지 않은 경우 Go\의 바꾸기AllString 함수는 \'$1W\'의 대체를 어떻게 처리합니까?

캡처 그룹 \'1W\'가 정규식에 정의되지 않은 경우 Go\의 바꾸기AllString 함수는 \'$1W\'의 대체를 어떻게 처리합니까?

Mary-Kate Olsen
풀어 주다: 2024-10-30 03:05:03
원래의
443명이 탐색했습니다.

How does Go's ReplaceAllString function handle the replacement of

Go의ReplaceAllString 함수 출력 이해

Go의 바꾸기AllString 함수는 문자열 내에서 정규식과 일치하는 모든 항목을 바꾸는 방법을 제공합니다. . 제공된 예제 코드의 첫 번째 출력은 이해하기 간단하지만 후속 출력은 혼란스러워 보일 수 있습니다.

출력 2 및 4: $1 역참조 이해

두 번째 네 번째 출력인 $1은 정규식 a(x)b의 첫 번째 괄호 세트로 정의된 캡처 그룹을 나타냅니다. 이 캡처 그룹은 임의 개수의 'x' 문자로 구성된 문자열을 일치시키고 캡처합니다.

  • 출력 2(fmt.Println(re.ReplaceAllString("-ab-axxb-", "$1 "))), $1은 캡처된 'x' 문자 문자열(--xx-)로 대체됩니다.
  • 출력 4(fmt.Println(re.ReplaceAllString("-ab-axxb-", "${1}W"))), $1은 캡처된 동일한 문자열로 대체되지만 중괄호(-W-xxW-)로 묶입니다.

출력 3: $1 이해 W

세 번째 출력(fmt.Println(re.ReplaceAllString("-ab-axxb-", "$1W")))이 가장 흥미롭습니다. 바꾸기 패턴의 "$ 기호"는 Expand 함수에서와 같이 해석됩니다.

Repl 내부에서 $ 기호는 Expand

Expand는 다음을 지정합니다.

템플릿에서 변수는 $name 또는 ${name} 형식의 하위 문자열로 표시됩니다. 여기서 name은 비어 있지 않은 문자, 숫자의 시퀀스입니다. 및 밑줄.

범위를 벗어났거나 일치하지 않는 인덱스 또는 정규 표현식에 없는 이름에 대한 참조는 빈 조각으로 대체됩니다.
$name 형식에서 이름은 다음과 같이 간주됩니다. 가능한 한 길게: $1x는 ${1}x가 아닌 ${1x}와 동일하며, $10은 ${1}0이 아닌 ${10}와 동일합니다.


우리의 경우 $1W는 가능한 한 길게 간주되므로 ${1W}와 동일합니다. 그러나 캡처 그룹 1W는 정규식에 정의되어 있지 않습니다. 즉, 일치 작업 중에 채워지지 않았으므로 "범위를 벗어났거나" "일치하지 않는" 인덱스로 간주됩니다. 따라서 $1W는 교체 단계에서

빈 문자열("")으로 교체됩니다.

위 내용은 캡처 그룹 \'1W\'가 정규식에 정의되지 않은 경우 Go\의 바꾸기AllString 함수는 \'$1W\'의 대체를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿