Heim > Backend-Entwicklung > Golang > Wie kann ich Go Regexp verwenden, um alles außer einer bestimmten Zeichenfolge abzugleichen?

Wie kann ich Go Regexp verwenden, um alles außer einer bestimmten Zeichenfolge abzugleichen?

Barbara Streisand
Freigeben: 2024-12-24 14:12:15
Original
253 Leute haben es durchsucht

How Can I Use Go Regexp to Match Everything Except a Specific String?

Kann ich mit Go Regexp alles außer einer bestimmten Zeichenfolge finden?

Wie viele ähnliche Fragen gezeigt haben, erfolgt der Abgleich mit einer bestimmten Zeichenfolge mit Go Reguläre Ausdrücke können eine Herausforderung sein. Bei dieser Frage geht es darum, wie ein Abgleich mit einer Zeichenfolge im Format „irgendetwas/irgendetwas/somestring“ durchgeführt werden kann, wobei Zeichenfolgen, die „somestring“ enthalten, ausgeschlossen werden sollen.

Das Muster „/././(. )“ würde mit „somestring“ übereinstimmen, aber wir möchten mit allem außer diesem übereinstimmen. Die meisten vorgeschlagenen Lösungen verwenden „/././((?!somestring).),“, was in Go regexp nicht gültig ist, da es ein nicht quantifizierbares Token enthält.

Gos Regexp-Modul unterstützt keine Lookaheads, um lineare Ausführungszeitlimits (O(n)) sicherzustellen. Daher sind Problemumgehungen erforderlich.

Webdienst für negierte Muster

Ein Ansatz besteht darin, den Non-Match-Regex-Webdienst zu verwenden, um mit POSIX kompatible negierte Muster zu generieren. Für „somestring“ das generierte Muster ist:

^(1|s(s|o(s|m(s|es(omes)(s| t(s|r(s|i(s|ns)))|o(s|ms)))))(2|o( 3|m(4|e(1|s(omes)(5|t(6|r(7|i( 8|n9)))|o(3|m(4|e1)))))))))(s(s|o(s|m(s|es( O mes)(s|t(s|r(s|i(s|ns)))|o(s|ms))))))(o((me?)?|mes(omes )*(t(r?|rin?)|o(me?)?)?))?)?$

Ersetzen das letzte „(.*)“ mit „“ in Ihren ursprünglichen Regex-Erträgen:

/10/10/((1 |s(s|o(s|m(s|es(omes)(s|t(s|r(s|i(s|ns)))|o(s|ms)))) )(2|o(3|m(4 |e(1|s(omes)(5|t(6| r(7|i(8|n9)))|o( 3|m(4|e1)))))))))( 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?)?)?))?)?)$

This stellt sicher, dass die Regex nur den Teil nach dem dritten Backslash erfasst.

Alle drei Teile erfassen

Eine alternative Lösung erfasst alle drei Teile, an denen Sie interessiert sind. Nach der Überprüfung Wenn Sie den Wert der Erfassungsgruppe Nr. 1 angeben, können Sie entscheiden, was zurückgegeben werden soll:

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
    }
}
Nach dem Login kopieren

  1. s
  2. os
  3. ms
  4. es
  5. ost
  6. rs
  7. ist
  8. ns
  9. gs
  10. /

Das obige ist der detaillierte Inhalt vonWie kann ich Go Regexp verwenden, um alles außer einer bestimmten Zeichenfolge abzugleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage