Heim > Backend-Entwicklung > Golang > Laufzeitoptimierung regulärer Ausdrücke

Laufzeitoptimierung regulärer Ausdrücke

王林
Freigeben: 2024-02-11 10:15:08
nach vorne
723 Leute haben es durchsucht

Laufzeitoptimierung regulärer Ausdrücke

php-Editor Youzi führt Sie in die Laufzeitoptimierung regulärer Ausdrücke ein. Reguläre Ausdrücke sind ein leistungsstarkes Tool zum Abgleichen und Verarbeiten von Zeichenfolgen, können jedoch bei der Arbeit mit großen Datenmengen zu Leistungsproblemen führen. Um die Ausführungseffizienz regulärer Ausdrücke zu verbessern, können wir einige Optimierungsstrategien anwenden, z. B. die Verwendung von Lazy Matching, die Vermeidung von Backtracking und die Verwendung präziserer Matching-Muster. Diese Optimierungstechniken können uns helfen, reguläre Ausdrücke in der tatsächlichen Entwicklung effizienter zu nutzen und die Programmleistung zu verbessern.

Frageninhalt

Die meisten regulären Ausdrücke sind während ihrer Lebensdauer „konstant“. Ist es eine gute Idee, globalereguläre Ausdrücke zu verwenden, um die Ausführung zu beschleunigen? Zum Beispiel:

func work() {
    r := regexp.mustcompile(`...`)
    if r.matchstring(...) {
        ...
    }
}
Nach dem Login kopieren

Vergleichen:

var r *regexp.Regexp

func work() {
    if r.MatchString(...) {
        ...
    }
}

func init() {
    r = regexp.MustCompile(`...`)
}
Nach dem Login kopieren

Gibt es bedeutende Unterschiede zwischen diesen beiden Versionen?

  1. Regex-Kompilierung ist sehr kostengünstig, daher lohnt es sich aus Sicht der CPU-Kosten und der Speicherbereinigung nicht, globale Regex zu verwenden (vorausgesetzt, work() wird stark aufgerufen)
  2. Am besten verwenden Sie gegebenenfalls globale reguläre Ausdrücke.

Welche der oben genannten Aussagen ist richtig oder ist die Antwort nicht einfach schwarz/weiß?

Workaround

Wenn Sie denselben regulären Ausdruck nur einmal verwenden (z. B. „d+“) -> lohnt es sich nicht, einen globalen regulären Ausdruck zu verwenden.

Wenn Sie häufig denselben regulären Ausdruck verwenden (z. B. „d+“) –> dann lohnt es sich,

zu verwenden
func benchmark01(b *testing.b) {
    for i := 0; i < b.n; i++ {
        r := regexp.mustcompile(`\d+`)
        r.matchstring("aaaaaaa123bbbbbbb")
    }
}

func benchmark02(b *testing.b) {
    r := regexp.mustcompile(`\d+`)
    for i := 0; i < b.n; i++ {
        r.matchstring("aaaaaaa123bbbbbbb")
    }
}
Nach dem Login kopieren
Benchmark01
Benchmark01-4             886909              1361 ns/op
Benchmark02
Benchmark02-4            5368380               232.8 ns/op
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonLaufzeitoptimierung regulärer Ausdrücke. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage