GO에서 반복 그룹 캡처
정규식 ([A-Z] )(?: "([^"] )")* 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!