> 백엔드 개발 > Golang > Go 정규 표현식에서 부정적 Lookbehind를 어떻게 시뮬레이션할 수 있나요?

Go 정규 표현식에서 부정적 Lookbehind를 어떻게 시뮬레이션할 수 있나요?

Susan Sarandon
풀어 주다: 2024-11-29 12:59:10
원래의
756명이 탐색했습니다.

How Can I Simulate Negative Lookbehind in Go Regular Expressions?

Go의 부정적 Lookbehind 시뮬레이션

Go에서는 성능상의 이유로 부정적인 Lookbehind 어설션이 지원되지 않습니다. 이는 뒤돌아보기 연산자를 사용하여 패턴 일치를 시도할 때 문제가 될 수 있습니다.

예를 들어, [@#/] 집합에서 선행 문자를 제외하고 문자열에서 명령을 추출하는 데 부정적인 뒤돌아보기를 사용할 수 있습니다. 부정적인 뒤돌아보기 어설션 사용:

\b(?<![@#\/])\w.*
로그인 후 복사

그러나 이 정규식은 부정적인 뒤돌아보기에 대한 지원 부족으로 인해 Go에서 컴파일되지 않습니다.

대체 접근 방식

대신에 부정적인 뒤돌아보기를 부정된 문자 집합으로 대체할 수 있습니다. 집합에 없는 모든 문자와 일치합니다.

업데이트된 정규식:

\b[^@#/]\w.*
로그인 후 복사

집합 [@#/]의 선행 문자가 시작 부분에 허용되는 경우 문자열이면 ^ 앵커를 사용할 수 있습니다:

(?:^|[^@#\/])\b\w.*
로그인 후 복사

필터 기능

또는 Go의 필터 기능을 사용하여 [@#/] 집합의 문자로 시작하는 문자열을 필터링할 수 있습니다.

func Filter(vs []string, f func(string) bool) []string {
    vsf := make([]string, 0)
    for _, v := range vs {
        if f(v) {
            vsf = append(vsf, v)
        }
    }
    return vsf
}
로그인 후 복사

프로세스 함수

필터를 활용한 처리 함수를 만들 수도 있습니다. 함수:

func Process(inp string) string {
    t := strings.Split(inp, " ")
    t = Filter(t, func(x string) bool {
        return strings.Index(x, "#") != 0 &&
               strings.Index(x, "@") != 0 &&
               strings.Index(x, "/") != 0
    })
    return strings.Join(t, " ")
}
로그인 후 복사

이 처리 함수는 입력 문자열을 변환하고 [@#/] 집합에서 문자로 시작하는 모든 단어를 제거하는 데 사용할 수 있습니다.

위 내용은 Go 정규 표현식에서 부정적 Lookbehind를 어떻게 시뮬레이션할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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