Heim > Backend-Entwicklung > Golang > Wie schließe ich eine bestimmte Zeichenfolge beim Abgleich in regulären Go-Ausdrücken aus?

Wie schließe ich eine bestimmte Zeichenfolge beim Abgleich in regulären Go-Ausdrücken aus?

Mary-Kate Olsen
Freigeben: 2024-12-20 07:58:12
Original
935 Leute haben es durchsucht

How to Exclude a Specific String When Matching in Go Regular Expressions?

Alles außer einer konstanten Zeichenfolge in regulären Go-Ausdrücken abgleichen

In Go gibt es unter Verwendung der regulären Ausdrucks-Engine RE2 keine direkte Möglichkeit, Lookahead-Behauptungen zu verwenden, um alle abzugleichen Zeichen außer einer bestimmten Zeichenfolge. Es gibt jedoch alternative Ansätze, um diese Funktionalität zu erreichen:

Webdienst zum Generieren negierter Muster

  1. Verwenden Sie den Onlinedienst [Non-match REGEX](http ://www.formauri.es/personal/pgimeno/misc/non-match-regex), um ein negiertes Muster für die Zeichenfolge zu generieren, die Sie ausschließen möchten („somestring“ in In diesem Fall).
  2. Ersetzen Sie in Ihrem regulären Ausdruck das letzte (.*) durch das generierte negierte Muster (stellen Sie sicher, dass das kopierte negierte Muster keine Backslashes enthält).

Für Wenn das generierte negierte Muster beispielsweise wie folgt lautet:

[^([^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?)?)?))?)?$
Nach dem Login kopieren

Ihr endgültiger regulärer Ausdruck sieht aus wie:

/[^/]*/[^/]*/(([^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?)?)?))?)?)$
Nach dem Login kopieren

Alle Teile erfassen

Alternativ können Sie alle drei Teile der Eingabezeichenfolge (getrennt durch Schrägstriche) in einem Slice erfassen. Überprüfen Sie dann, ob der dritte Teil (val[1]) der Zeichenfolge entspricht, die Sie ausschließen möchten (in diesem Fall „somestring“). Wenn es nicht übereinstimmt, verwenden Sie val[1] als erwartetes Ergebnis:

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
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie schließe ich eine bestimmte Zeichenfolge beim Abgleich in regulären Go-Ausdrücken aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage