Heim >Backend-Entwicklung >Golang >Wie schließe ich bestimmte Zeichenfolgen aus, wenn ich Go Regex verwende?

Wie schließe ich bestimmte Zeichenfolgen aus, wenn ich Go Regex verwende?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-17 08:57:24125Durchsuche

How to Exclude Specific Strings When Using Go Regex?

Go Regex: Ausschließen bestimmter Zeichenfolgen

In Go kann es zu Herausforderungen kommen, wenn Sie versuchen, mit dem Regexp-Paket etwas außer bestimmten konstanten Zeichenfolgen abzugleichen . Obwohl viele vorgeschlagene Lösungen mit Lookaheads aufgrund der eingeschränkten Syntax von Go regexp nicht anwendbar sind, stehen alternative Ansätze zur Verfügung.

Workaround 1: Verwenden Sie einen Generator für negierte Muster

Da Go regexp unterstützt keine Lookaheads. Erwägen Sie die Verwendung eines externen Dienstes wie http://www.formauri.es/personal/pgimeno/misc/non-match-regex erzeugen negierte Muster. Das negierte Muster für „somestring“ lautet beispielsweise:

$ ^([^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?)?)?))?)?$

Um dieses negierte Muster in Ihrem ursprünglichen regulären Ausdruck zu verwenden, ersetzen Sie das letzte (.*) durch den , was zu … führt ein Muster, das wie folgt aussieht:

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

Alternativ können Sie das Muster [^/] verwenden, um null oder mehr Zeichen außer / anstelle von zu finden .*.

Problemumgehung 2: Alle Abschnitte erfassen und Werte überprüfen

Obwohl Sie keine Lookaheads verwenden können, können Sie alle drei Teile Ihres Musters erfassen und den Wert von überprüfen die erste Erfassungsgruppe, um zu bestimmen, ob der erfasste Wert verwendet oder keine Übereinstimmung gemeldet werden soll:

package main

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")
    }
}

Das obige ist der detaillierte Inhalt vonWie schließe ich bestimmte Zeichenfolgen aus, wenn ich Go Regex verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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