>  기사  >  백엔드 개발  >  Go의 정규식에서 여러 인용 인수를 캡처하는 방법은 무엇입니까?

Go의 정규식에서 여러 인용 인수를 캡처하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-27 02:39:30781검색

How to Capture Multiple Quoted Arguments in a Regular Expression in Go?

GO에서 반복 그룹 캡처

정규식 ([A-Z] )(?: "([^"] )")* 0개 이상의 큰따옴표로 묶인 인수가 뒤따르는 대문자 단어를 캡처하도록 설계되었습니다. 그러나 알고 있듯이 마지막 인수만 캡처합니다.

정규식 이해

정규식은 두 개의 캡처 그룹으로 구성됩니다.

  1. ([A-Z] ): 대문자 단어와 일치합니다.
  2. (?: "([^"] )")*: 일치 큰따옴표로 묶인 인수. *는 이 그룹이 0회 이상 반복될 수 있음을 나타냅니다.

두 번째 그룹이 비캡처 그룹을 참조하는 괄호로 묶여 있기 때문에 문제가 발생합니다. 즉, 정규식은 여러 인수와 일치하지만 결과 변수에 마지막 인수만 저장합니다.

해결책

모든 인수를 캡처하려면 정규식을 다음과 같이 수정하세요.

re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)

별표 *를 더하기 로 바꾸면 두 번째 그룹이 이제 캡처 그룹이 됩니다.

샘플 코드

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)
    results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)

    fmt.Println("Command:", results[0][1])
    for _, arg := range results[1:] {
        fmt.Println("Arg:", arg[2])
    }
}

놀이터

https://play.golang.org/p/8WmZ0yuHHzj

위 내용은 Go의 정규식에서 여러 인용 인수를 캡처하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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