Go Regex의 부정 일치
Go 정규 표현식에서는 둘러보기 구성이 부족하기 때문에 특정 상수 문자열을 제외한 모든 항목을 일치시키는 것이 어려울 수 있습니다. .
원본 RegExp:
제공된 정규식 /.*/.*/(.*)는 세 개의 백슬래시 뒤의 모든 항목과 일치합니다. 단, "somestring"이 포함된 문자열은 제외하지 않습니다.
부정 접근 방식
방법 1: 웹 서비스
하나 해결 방법에는 POSIX 호환 부정 패턴을 생성하는 웹 서비스를 사용하는 것이 포함됩니다. "somestring"의 경우 원본 RegExp로 대체될 수 있는 복잡한 패턴이 생성됩니다.
/[^/]*/[^/]*/^([^s]|s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*([^os]|o([^ms]|m([^es]|e([^s]|s(omes)*([^ost]|t([^rs]|r([^is]|i([^ns]|n[^gs])))|o([^ms]|m([^es]|e[^s]))))))))*(s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*(o((me?)?|mes(omes)*(t(r?|rin?)|o(me?)?)?))?)?$
방법 2: 문자 클래스
.*를 사용하는 대신 , 다음 표현식은 부정 문자 클래스 [^/]를 사용합니다.
`[^/]+/[^/]+/(.*)`
이것은 무엇이든 일치합니다. 세 번째 백슬래시까지 가능하지만 "somestring"이 있는 문자열은 제외되지 않습니다.
캡처 그룹을 사용한 해결 방법
RE2(Go에서 사용)는 미리보기를 지원하지 않기 때문에 , 문자열의 세 부분을 모두 캡처하고 캡처 그룹의 추출된 값을 확인할 수 있습니다.
import ( "fmt" "regexp" ) func main() { s := "anything/anything/somestring" r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`) val := r.FindStringSubmatch(s) if len(val) > 1 && val[1] != "somestring" { fmt.Println(val[1]) } else { fmt.Println("No match") } }
이것은 접근 방식은 일치하는 값을 캡처하고 "somestring"과 일치하지 않으면 인쇄합니다.
위 내용은 둘러보기 없이 Go 정규식에서 부정 일치를 효과적으로 수행하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!