>백엔드 개발 >Golang >Go Regexp를 사용하여 특정 문자열을 제외한 모든 항목을 일치시키려면 어떻게 해야 합니까?

Go Regexp를 사용하여 특정 문자열을 제외한 모든 항목을 일치시키려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-24 14:12:15253검색

How Can I Use Go Regexp to Match Everything Except a Specific String?

Go Regexp를 사용하여 특정 문자열을 제외한 모든 것을 찾을 수 있습니까?

많은 유사한 질문이 표시된 것처럼 Go를 사용하여 특정 문자열과 일치합니다. 정규 표현식은 어려울 수 있습니다. 이 질문은 "anything/anything/somestring" 형식의 문자열과 일치하는 방법을 묻지만 "somestring"이 포함된 문자열은 제외합니다.

패턴 "/././(. )"는 "somestring"과 일치하지만 우리는 그것을 제외한 모든 것과 일치하려고 합니다. 대부분 제안된 솔루션은 "/././((?!somestring).)"을 사용하는데, 이는 수량화할 수 없는 토큰이 포함되어 있기 때문에 Go 정규식에서는 유효하지 않습니다.

Go의 regexp 모듈은 선형 실행 시간(O(n)) 제한을 보장하기 위한 예측을 지원하지 않습니다. 따라서 해결 방법이 필요합니다.

부정 패턴용 웹 서비스

한 가지 접근 방식은 정규 표현식이 일치하지 않는 웹 서비스를 사용하여 POSIX와 호환되는 부정 패턴을 생성하는 것입니다. "somestring"의 경우 생성된 패턴 는:

^(1|s(s|o(s|m(s|es(omes)(s| t(s|r(s|i(s|ns)))|o(s|ms)))))(2|o( 3|m(4|e(1|s(omes)(5|t(6|r(7|i( 8|n9)))|o(3|m(4|e1)))))))(s(s|o(s|m(s|es( 영형 mes)(s|t(s|r(s|i(s|ns)))|o(s|ms)))))(o((me?)?|mes(omes )*(t(r?|rin?)|o(me?)?)?))?)?$

교체 중 마지막 "(.*)"와 "" 원래 정규식에서는 다음과 같은 결과를 얻습니다.

/10/10/((1 |s(s|o(s|m(s|es(omes)(s|t(s|r(s|i(s|ns)))|o(s|ms)))) )(2|o(3|m(4 |e(1|s(omes)(5|t(6| r(7|i(8|n9)))|o( 3|m(4|e1)))))))( s(s|o (s|m(s|es(omes)(s|t(s|r(s|i(s|ns)))|o(s|ms)))))(o( (나?)?|mes(omes)*(t(r?|rin?)|o(me?)?)))?)?)$

이것 정규식은 세 번째 백슬래시 다음 부분만 캡처합니다.

세 부분 모두 캡처

대체 솔루션은 관심 있는 세 부분을 모두 캡처합니다. 확인한 후 캡처 그룹 #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
    }
}

  1. s
  2. os
  3. ms
  4. 에스
  5. ost
  6. rs
  7. ns
  8. gs
  9. /

위 내용은 Go Regexp를 사용하여 특정 문자열을 제외한 모든 항목을 일치시키려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.