Während Go aus Leistungsgründen keine negativen Lookbehinds in regulären Ausdrücken nativ unterstützt, kann eine alternative Strategie verwendet werden, um eine ähnliche Funktionalität zu erreichen.
Betrachten Sie den ursprünglichen regulären Ausdruck:
\b(?<![@#\/])\w.*
Seit dem negiertes Lookbehind untersucht nur einen Zeichensatz, er kann durch einen negierten Zeichensatz selbst ersetzt werden:
\b[^@#/]\w.*
Wenn Zeichen am Anfang der Zeichenfolge erscheinen dürfen, fügen Sie den ^-Anker hinzu:
(?:^|[^@#\/])\b\w.*
Für einen verfeinerten Ansatz kann eine Filterfunktion implementiert werden:
func Filter(vs []string, f func(string) bool) []string { vsf := make([]string, 0) for _, v := range vs { if f(v) { vsf = append(vsf, v) } } return vsf }
Diese Filterfunktion kann dann in einem Prozess eingesetzt werden Funktion:
func Process(inp string) string { t := strings.Split(inp, " ") t = Filter(t, func(x string) bool { return strings.Index(x, "#") != 0 && strings.Index(x, "@") != 0 && strings.Index(x, "/") != 0 }) return strings.Join(t, " ") }
Insgesamt ermöglichen diese Techniken die Emulation negativer Lookbehinds in Go und bieten eine Problemumgehung für die fehlende direkte Sprachunterstützung für diese Funktion.
Das obige ist der detaillierte Inhalt vonWie kann ich negative Lookbehinds in regulären Go-Ausdrücken emulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!