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.
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(...) { ... } }
Vergleichen:
var r *regexp.Regexp func work() { if r.MatchString(...) { ... } } func init() { r = regexp.MustCompile(`...`) }
Gibt es bedeutende Unterschiede zwischen diesen beiden Versionen?
work()
wird stark aufgerufen)Welche der oben genannten Aussagen ist richtig oder ist die Antwort nicht einfach schwarz/weiß?
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,
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") } }
Benchmark01 Benchmark01-4 886909 1361 ns/op Benchmark02 Benchmark02-4 5368380 232.8 ns/op
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!