Heim >Backend-Entwicklung >Golang >Wie kann ich alles außer einer bestimmten Zeichenfolge in regulären Go-Ausdrücken abgleichen?

Wie kann ich alles außer einer bestimmten Zeichenfolge in regulären Go-Ausdrücken abgleichen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-17 04:55:24688Durchsuche

How Can I Match Anything Except a Specific String in Go Regular Expressions?

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

In Go wird der Abgleich regulärer Ausdrücke mithilfe des Regexp-Pakets durchgeführt. Dieses Paket bietet zwar leistungsstarke Funktionen, weist jedoch Einschränkungen auf, darunter das Fehlen von Lookaheads. Dies stellt eine Herausforderung dar, wenn versucht wird, alle außer bestimmten Mustern zuzuordnen, beispielsweise wenn eine konstante Zeichenfolge ausgeschlossen wird.

Der ursprüngliche Ansatz, das Muster /.*/.*/(.*) zu verwenden, würde nur eines zuordnen Teil der gewünschten Saite, sodass sie für den beabsichtigten Zweck ungeeignet ist. Stattdessen ist ein umfassenderes Muster erforderlich.

Negierte Zeichenklassen verstehen

Go Regex verwendet negierte Zeichenklassen, um bestimmte Zeichen oder Zeichengruppen auszuschließen. Beispielsweise entspricht [^/] jedem Zeichen außer dem Schrägstrich (/). Daher würde das Ersetzen des ersten .* durch [^/]* null oder mehr Zeichen außer / ergeben.

Es ist jedoch wichtig, alle drei Teile der Zeichenfolge zu erfassen, um festzustellen, ob der erste Teil (nach dem zwei Schrägstriche) enthält nicht die spezifische Zeichenfolge. Dies wird erreicht, indem das Muster wie folgt geändert wird:

r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`)

Negation bei der Submatch-Auswertung verwenden

Nach der Erfassung aller drei Teile kann der Wert als Array extrahiert werden von Saiten. Das erste Element (val[1]) stellt die erfasste Zeichenfolge nach dem dritten Schrägstrich dar. Um die spezifische Zeichenfolge auszuschließen, wird die folgende Bedingung ausgewertet:

if len(val) > 1 && val[1] != "somestring" {
    fmt.Println(val[1])
}

Wenn die Bedingung erfüllt ist (mehr als ein Element im Array und val[1] ungleich „somestring“), wird die gewünschte Teilzeichenfolge angezeigt gedruckt wird. Andernfalls wird „Keine Übereinstimmung“ angezeigt.

Alternative Lösung mit dem Non-Match-Regex-Webservice

Da es in Go Regexp keine Lookaheads gibt, kann man http://www .formauri.es/personal/pgimeno/misc/non-match-regex Webservice zum Generieren POSIX-kompatibler negierter Muster. Mit diesem Dienst kann ein negiertes Muster für die spezifische Zeichenfolge erhalten werden.

Fazit

Obwohl die regulären Ausdrucksfunktionen von Go in bestimmten Aspekten eingeschränkt sind, gibt es wirksame Problemumgehungen die gewünschte Matching-Funktionalität erreichen. Durch die Nutzung negierter Zeichenklassen und einer sorgfältigen Unterübereinstimmungsauswertung oder durch die Verwendung der oben genannten alternativen Lösung unter Verwendung eines nicht übereinstimmenden Regex-Webservices kann man die Aufgabe erfüllen, mit regulären Go-Ausdrücken alles außer einer konstanten Zeichenfolge abzugleichen.

Das obige ist der detaillierte Inhalt vonWie kann ich alles außer einer bestimmten Zeichenfolge in regulären Go-Ausdrücken abgleichen?. 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