Go에서는 정규식 엔진 RE2를 활용하여 모든 항목을 일치시키기 위해 예측 어설션을 사용하는 직접적인 방법이 없습니다. 특정 문자열을 제외한 문자. 그러나 이 기능을 달성하기 위한 대체 접근 방식이 있습니다.
부정 패턴을 생성하는 웹 서비스
예를 들어 생성된 부정 패턴이 다음과 같은 경우:
[^([^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?)?)?))?)?$
최종 정규식은 다음과 같습니다. like:
/[^/]*/[^/]*/(([^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?)?)?))?)?)$
모든 부분 캡처
또는 입력 문자열의 세 부분(슬래시로 구분)을 모두 하나의 조각으로 캡처할 수도 있습니다. 그런 다음 세 번째 부분(val[1])이 제외하려는 문자열(이 경우 "somestring")과 동일한지 확인하세요. 일치하지 않으면 예상 결과로 val[1]을 사용하십시오.
package main import ( "fmt" "regexp" ) func main() { s := "anything/anything/somestring" r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`) val := r.FindStringSubmatch(s) // fmt.Println(val[1]) // -> somestring if len(val) > 1 && val[1] != "somestring" { // val has more than 1 element and is not equal to somestring? fmt.Println(val[1]) // Use val[1] } else { fmt.Println("No match") // Else, report no match } }
위 내용은 Go 정규 표현식에서 일치할 때 특정 문자열을 제외하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!