> 백엔드 개발 > Golang > Go를 사용하여 문자열에서 겹치는 일치 항목을 효율적으로 찾는 방법은 무엇입니까?

Go를 사용하여 문자열에서 겹치는 일치 항목을 효율적으로 찾는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-22 03:55:11
원래의
233명이 탐색했습니다.

How Can I Efficiently Find Overlapping Matches in a String Using Go?

Golang의 중복 패턴 일치: 간단한 솔루션

Go의 regexp 패키지는 패턴 일치를 위한 강력한 기능을 제공하지만 기본적으로 중복에 대한 지원은 부족합니다. 성냥. 이 문제를 해결하기 위해 strings.Index 함수를 활용하는 간단하고 효율적인 접근 방식이 더 적합한 솔루션을 제공합니다.

다음 코드를 고려하세요.

input := "...#...#....#.....#..#..#..#......."
idx := []int{}
j := 0
for {
    i := strings.Index(input[j:], "..#..")
    if i == -1 {
        break
    }
    fmt.Println(j)
    idx = append(idx, j+i)
    j += i+1
}
fmt.Println("Indexes:", idx)
로그인 후 복사

이 스니펫에서 변수 입력은 대상 문자열. 입력 문자열 내에서 패턴 일치의 시작 인덱스를 저장하기 위해 idx라는 빈 정수 조각을 초기화합니다. j 변수는 검색에서 현재 위치를 추적합니다.

해결책의 핵심은 for 루프에 있습니다. ".#.." 패턴을 검색하기 위해 strings.Index를 반복적으로 호출합니다. 반환된 값 i는 인덱스 j에서 시작하는 패턴의 첫 번째 발생을 나타냅니다. i가 -1이 아니면 일치 항목을 찾은 것이며 idx 슬라이스에 시작 인덱스(j i)를 기록합니다. 그런 다음 j를 i 1씩 증가시켜 일치하는 문자 다음의 문자로 검색을 이동합니다.

루프는 더 이상 일치하는 문자가 없을 때까지 이 프로세스를 계속합니다. 그런 다음 입력 문자열에서 ".#.."의 모든 중복 일치 항목에 대한 시작 인덱스 목록을 얻습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿