Runtime optimization of regular expressions

王林
Release: 2024-02-11 10:15:08
forward
631 people have browsed it

Runtime optimization of regular expressions

php editor Youzi will introduce you to the runtime optimization of regular expressions. Regular expressions are a powerful tool for string matching and processing, but can cause performance issues when working with large-scale data. In order to improve the execution efficiency of regular expressions, we can adopt some optimization strategies, such as using lazy matching, avoiding the use of backtracking, and using more precise matching patterns. These optimization techniques can help us use regular expressions more efficiently in actual development and improve program performance.

Question content

Most regular expressions are "constant" during their lifetime. Is it a good idea to use global regular expressions to speed up execution? For example:

func work() {
    r := regexp.mustcompile(`...`)
    if r.matchstring(...) {
        ...
    }
}
Copy after login

Compare:

var r *regexp.Regexp

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

func init() {
    r = regexp.MustCompile(`...`)
}
Copy after login

Are there any meaningful differences between the two versions?

  1. Regular expressions are very cheap to compile, so from a cpu cost and garbage collection perspective, it is not worth using global regular expressions (assuming work() is called heavily)
  2. It is best to use global regular expressions when appropriate.

Which of the above is correct, or is the answer not simply black/white?

Workaround

It's not worth using a global regular expression if you only use the same regular expression once (e.g. "\d ") ->

If you often use the same regular expression (e.g. "\d ") ->, then it's worth using

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")
    }
}
Copy after login
Benchmark01
Benchmark01-4             886909              1361 ns/op
Benchmark02
Benchmark02-4            5368380               232.8 ns/op
Copy after login

The above is the detailed content of Runtime optimization of regular expressions. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!