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 중국어 웹사이트의 기타 관련 기사를 참조하세요!