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
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?)?)?))?)?$
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?)?)?))?)?)$
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 } }
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!