>백엔드 개발 >Golang >Go Regex에서 Ruby의 캡처 그룹 기능을 복제하는 방법은 무엇입니까?

Go Regex에서 Ruby의 캡처 그룹 기능을 복제하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-18 18:14:12799검색

How to Replicate Ruby's Capturing Group Functionality in Go Regex?

Go Regex에서 Ruby 캡처 그룹 기능을 에뮬레이트하는 방법

Ruby에서 Go로 코드를 전환할 때 정규식 호환성이 어려울 수 있습니다. Ruby는 PCRE를 사용하는 반면 Go는 Google의 RE2를 사용하므로 개발자는 표현을 조정할 방법이 필요합니다.

구체적으로 일치하는 패턴에서 특정 데이터를 추출할 수 있는 그룹 기능을 캡처하는 것은 어려운 일입니다. Go에서 이 기능을 복제하려면 다음 단계를 수행할 수 있습니다.

  1. 명명된 캡처 그룹 사용:
    Ruby 캡처 그룹에 사용된 대괄호를 구문(? P 뒤에 패턴이 옵니다. 예를 들어 (?d{4})는 다음과 같습니다. (?Pd{4}).
  2. 상호 참조 그룹 이름:
    컴파일된 정규식에서 SubexpNames() 메서드를 호출하여 캡처 목록을 얻습니다. 이 정보는 나중에 캡처된 데이터를 추출하는 데 사용됩니다.
  3. 그룹을 사용한 추출 이름:
    특정 그룹에서 데이터를 검색하려면 r.FindStringSubmatch(s)[groupName] 구문을 사용합니다. 여기서 r은 컴파일된 정규식, s는 입력 문자열, groupName은 그룹의 이름입니다.

예를 들어, 정규식을 사용하여 날짜 문자열에서 연도를 추출하려면 (?Pd{4})-(?Pd{2})-(?Pd{2}), 다음 코드를 사용합니다.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    r := regexp.MustCompile(`(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})`)
    fmt.Printf("%#v\n", r.FindStringSubmatch(`2015-05-27`))
    fmt.Printf("%#v\n", r.SubexpNames())
}

이 코드는 다음을 출력합니다.

[]string{"2015", "05", "27"}
[]string{""}

첫 번째 줄에는 캡처된 값이 순서대로 표시되고 두 번째 줄에는 캡처 그룹 이름이 표시됩니다. 이러한 기술을 사용하면 Go에서도 Ruby와 유사한 캡처 그룹 기능을 얻을 수 있습니다.

위 내용은 Go Regex에서 Ruby의 캡처 그룹 기능을 복제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.