>백엔드 개발 >Golang >Go 문자열에서 모든 정규식 일치 항목을 효율적으로 찾는 방법은 무엇입니까?

Go 문자열에서 모든 정규식 일치 항목을 효율적으로 찾는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 09:32:21468검색

How to Efficiently Find All Regex Matches in a Go String?

Go에서 정규식으로 일치 항목 찾기

Go로 작업할 때 정규식을 사용하여 문자열 내의 특정 패턴을 일치시켜야 하는 경우가 있습니다. regexp 패키지를 사용하여 이 작업을 수행하는 방법은 다음과 같습니다.

질문:

주어진 문자열 내에서 지정된 정규식에 대한 모든 일치 항목을 어떻게 찾아 반환할 수 있습니까? 배열?

예:

문자열 "{city}, {state} {zip}"을 고려하세요. 목표는 중괄호로 묶인 모든 하위 문자열을 포함하는 배열을 반환하는 것입니다.

초기 시도:

regexp 패키지를 사용하여 다음 코드를 시도했을 수 있습니다.

r := regexp.MustCompile("/({[^}]*})/")
matches := r.FindAllString("{city}, {state} {zip}", -1)

그러나 이 코드는 일치하는 항목이 없음을 나타내는 빈 조각을 반환합니다.

해결책:

이 문제를 해결하려면 다음 단계를 고려하세요.

  1. 불필요한 정규식 구분 기호(예: /)를 제거하세요. .
  2. 원시 문자열 리터럴을 사용하여 정규식 패턴을 정의하면 다음이 가능합니다. 단일 백슬래시로 메타 문자를 이스케이프합니다.
  3. 정규식 패턴에서 캡처 그룹을 제거하여 중괄호 없이 일치하는 전체 문자열을 가져옵니다.

모든 일치의 경우:

r := regexp.MustCompile(`{[^{}]*}`)
matches := r.FindAllString("{city}, {state} {zip}", -1)
fmt.Println(matches) // Prints: [{city}, {state}, {zip}]

캡처된 부품의 경우 만:

r := regexp.MustCompile(`{([^{}]*)}`)
matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1)
for _, v := range matches {
    fmt.Println(v[1]) // Prints: city, state, zip
}

위 내용은 Go 문자열에서 모든 정규식 일치 항목을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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