Golang의 겹치는 패턴 일치: 종합 가이드
정규식 패키지의 제한으로 인해 Go에서는 겹치는 패턴을 일치시키는 것이 어려울 수 있습니다. . 이 기사에서는 strings.Index의 단순성과 효율성을 활용하여 중첩 패턴 일치를 효과적으로 달성하는 대체 접근 방식에 대해 설명합니다.
문제:
주어진 문자열과 "..#.."과 같은 패턴의 경우 중복 여부에 관계없이 패턴의 모든 인스턴스를 찾는 것이 목표입니다. 기존 regexp.FindAllStringSubmatchIndex 메서드는 겹치지 않는 일치 항목만 캡처합니다.
해결책:
regexp에 의존하는 대신 strings.Index 및 에 대한 loop:
func FindOverlappingPattern(input, pattern string) []int { idx := []int{} j := 0 for { i := strings.Index(input[j:], pattern) if i == -1 { break } fmt.Println(j) idx = append(idx, j+i) j += i + len(pattern) } fmt.Println("Indexes:", idx) return idx }
설명:
입력 문자열의 나머지 부분에서 strings.Index를 사용하여 패턴을 반복적으로 검색하는 함수입니다. 발견된 각 양수 인덱스는 인덱스 목록에 추가됩니다. 더 이상 일치하는 항목이 발견되지 않을 때까지 루프가 계속됩니다.
샘플 사용법:
input := "...#...#....#.....#..#..#..#......." pattern := "..#.." result := FindOverlappingPattern(input, pattern) // result: [1, 10, 16, 22, 29]
이점:
이 접근 방식 간단하며 Go의 기본 문자열 검색 기능을 활용합니다. 간단한 패턴 일치 작업의 단순성과 효율성 측면에서 정규식 기반 솔루션보다 성능이 뛰어납니다.
위 내용은 Go에서 모든 겹치는 패턴 일치를 효율적으로 찾을 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!