Heim >Backend-Entwicklung >Golang >Wie schließe ich bestimmte Zeichenfolgen aus, wenn ich Go Regex verwende?
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
/[^/]*/[^/]*/(([^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!