Comments (2)
Looking at https://godoc.org/github.com/dlclark/regexp2, I suspect this library is a lot slower since working with bytes tend to be a lot faster than strings.
from regexp2.
I have ported several benchmarks from the regexp
package to regexp2
for comparison. You can find them in the regexp_performance_test.go file. Here's the output from my machine (2015 2.5Ghz i7 MacBook Pro)
BenchmarkLiteral-8 3000000 451 ns/op
BenchmarkNotLiteral-8 300000 4640 ns/op
BenchmarkMatchClass-8 1000000 1046 ns/op
BenchmarkMatchClass_InRange-8 1000000 1036 ns/op
BenchmarkAnchoredLiteralShortNonMatch-8 10000000 158 ns/op
BenchmarkAnchoredLiteralLongNonMatch-8 20000000 98.5 ns/op
BenchmarkAnchoredShortMatch-8 5000000 293 ns/op
BenchmarkAnchoredLongMatch-8 10000000 229 ns/op
BenchmarkOnePassShortA-8 1000000 1092 ns/op
BenchmarkNotOnePassShortA-8 1000000 1130 ns/op
BenchmarkOnePassShortB-8 2000000 724 ns/op
BenchmarkNotOnePassShortB-8 2000000 738 ns/op
BenchmarkOnePassLongPrefix-8 5000000 318 ns/op
BenchmarkOnePassLongNotPrefix-8 5000000 295 ns/op
BenchmarkMatchEasy0_32-8 20000000 95.6 ns/op 334.80 MB/s
BenchmarkMatchEasy0_1K-8 5000000 249 ns/op 4100.65 MB/s
BenchmarkMatchEasy0_32K-8 200000 7388 ns/op 4435.27 MB/s
BenchmarkMatchEasy0_1M-8 5000 278079 ns/op 3770.77 MB/s
BenchmarkMatchEasy0_32M-8 100 11788037 ns/op 2846.48 MB/s
BenchmarkMatchEasy1_32-8 10000000 200 ns/op 159.84 MB/s
BenchmarkMatchEasy1_1K-8 300000 5126 ns/op 199.75 MB/s
BenchmarkMatchEasy1_32K-8 10000 146121 ns/op 224.25 MB/s
BenchmarkMatchEasy1_1M-8 300 4805608 ns/op 218.20 MB/s
BenchmarkMatchEasy1_32M-8 10 155318543 ns/op 216.04 MB/s
BenchmarkMatchMedium_32-8 3000000 518 ns/op 61.71 MB/s
BenchmarkMatchMedium_1K-8 100000 16009 ns/op 63.96 MB/s
BenchmarkMatchMedium_32K-8 3000 521474 ns/op 62.84 MB/s
BenchmarkMatchMedium_1M-8 100 16629170 ns/op 63.06 MB/s
BenchmarkMatchMedium_32M-8 2 536617056 ns/op 62.53 MB/s
BenchmarkMatchHard_32-8 100000 20548 ns/op 1.56 MB/s
BenchmarkMatchHard_1K-8 2000 1010383 ns/op 1.01 MB/s
BenchmarkMatchHard_32K-8 50 35005369 ns/op 0.94 MB/s
BenchmarkMatchHard_1M-8 1 1175492392 ns/op 0.89 MB/s
BenchmarkMatchHard_32M-8 1 38285374740 ns/op 0.88 MB/s
BenchmarkMatchHard1_32-8 500000 2924 ns/op 10.94 MB/s
BenchmarkMatchHard1_1K-8 10000 104998 ns/op 9.75 MB/s
BenchmarkMatchHard1_32K-8 500 3484198 ns/op 9.40 MB/s
BenchmarkMatchHard1_1M-8 10 110913710 ns/op 9.45 MB/s
BenchmarkMatchHard1_32M-8 1 3534549771 ns/op 9.49 MB/s
BenchmarkLeading-8 100000 15429 ns/op
BenchmarkParserPrefixLongLen-8 100 14529825 ns/op
And from the stdlib on the same box (go 1.12.1):
pkg: regexp
BenchmarkFind-8 10000000 226 ns/op 0 B/op 0 allocs/op
BenchmarkFindAllNoMatches-8 20000000 121 ns/op 0 B/op 0 allocs/op
BenchmarkFindString-8 10000000 222 ns/op 0 B/op 0 allocs/op
BenchmarkFindSubmatch-8 5000000 314 ns/op 48 B/op 1 allocs/op
BenchmarkFindStringSubmatch-8 5000000 296 ns/op 32 B/op 1 allocs/op
BenchmarkLiteral-8 20000000 78.3 ns/op
BenchmarkNotLiteral-8 1000000 1284 ns/op
BenchmarkMatchClass-8 1000000 1678 ns/op
BenchmarkMatchClass_InRange-8 1000000 1646 ns/op
BenchmarkReplaceAll-8 1000000 1159 ns/op
BenchmarkAnchoredLiteralShortNonMatch-8 20000000 64.7 ns/op
BenchmarkAnchoredLiteralLongNonMatch-8 20000000 85.1 ns/op
BenchmarkAnchoredShortMatch-8 20000000 111 ns/op
BenchmarkAnchoredLongMatch-8 10000000 217 ns/op
BenchmarkOnePassShortA-8 3000000 509 ns/op
BenchmarkNotOnePassShortA-8 3000000 464 ns/op
BenchmarkOnePassShortB-8 5000000 389 ns/op
BenchmarkNotOnePassShortB-8 5000000 331 ns/op
BenchmarkOnePassLongPrefix-8 20000000 90.2 ns/op
BenchmarkOnePassLongNotPrefix-8 5000000 302 ns/op
BenchmarkMatchParallelShared-8 30000000 59.1 ns/op
BenchmarkMatchParallelCopied-8 20000000 60.9 ns/op
BenchmarkQuoteMetaAll-8 20000000 92.3 ns/op 151.73 MB/s
BenchmarkQuoteMetaNone-8 30000000 48.1 ns/op 540.88 MB/s
BenchmarkMatch/Easy0/32-8 20000000 58.0 ns/op 551.51 MB/s
BenchmarkMatch/Easy0/1K-8 5000000 259 ns/op 3939.41 MB/s
BenchmarkMatch/Easy0/32K-8 300000 4134 ns/op 7924.96 MB/s
BenchmarkMatch/Easy0/1M-8 10000 220826 ns/op 4748.42 MB/s
BenchmarkMatch/Easy0/32M-8 200 7406666 ns/op 4530.30 MB/s
BenchmarkMatch/Easy0i/32-8 2000000 953 ns/op 33.58 MB/s
BenchmarkMatch/Easy0i/1K-8 50000 25836 ns/op 39.63 MB/s
BenchmarkMatch/Easy0i/32K-8 2000 1072221 ns/op 30.56 MB/s
BenchmarkMatch/Easy0i/1M-8 50 34027283 ns/op 30.82 MB/s
BenchmarkMatch/Easy0i/32M-8 1 1147085221 ns/op 29.25 MB/s
BenchmarkMatch/Easy1/32-8 30000000 54.7 ns/op 585.51 MB/s
BenchmarkMatch/Easy1/1K-8 2000000 718 ns/op 1424.34 MB/s
BenchmarkMatch/Easy1/32K-8 50000 30969 ns/op 1058.09 MB/s
BenchmarkMatch/Easy1/1M-8 2000 1085243 ns/op 966.21 MB/s
BenchmarkMatch/Easy1/32M-8 50 34915840 ns/op 961.01 MB/s
BenchmarkMatch/Medium/32-8 2000000 820 ns/op 39.01 MB/s
BenchmarkMatch/Medium/1K-8 50000 24286 ns/op 42.16 MB/s
BenchmarkMatch/Medium/32K-8 2000 1045737 ns/op 31.33 MB/s
BenchmarkMatch/Medium/1M-8 50 33503487 ns/op 31.30 MB/s
BenchmarkMatch/Medium/32M-8 1 1075915924 ns/op 31.19 MB/s
BenchmarkMatch/Hard/32-8 1000000 1251 ns/op 25.56 MB/s
BenchmarkMatch/Hard/1K-8 50000 37643 ns/op 27.20 MB/s
BenchmarkMatch/Hard/32K-8 1000 1474564 ns/op 22.22 MB/s
BenchmarkMatch/Hard/1M-8 30 48328999 ns/op 21.70 MB/s
BenchmarkMatch/Hard/32M-8 1 1677001522 ns/op 20.01 MB/s
BenchmarkMatch/Hard1/32-8 200000 7289 ns/op 4.39 MB/s
BenchmarkMatch/Hard1/1K-8 10000 217006 ns/op 4.72 MB/s
BenchmarkMatch/Hard1/32K-8 200 6988508 ns/op 4.69 MB/s
BenchmarkMatch/Hard1/1M-8 5 227978092 ns/op 4.60 MB/s
BenchmarkMatch/Hard1/32M-8 1 7342015123 ns/op 4.57 MB/s
BenchmarkMatch_onepass_regex/32-8 2000000 707 ns/op 45.24 MB/s 0 B/op 0 allocs/op
BenchmarkMatch_onepass_regex/1K-8 100000 20132 ns/op 50.86 MB/s 0 B/op 0 allocs/op
BenchmarkMatch_onepass_regex/32K-8 2000 642681 ns/op 50.99 MB/s 0 B/op 0 allocs/op
BenchmarkMatch_onepass_regex/1M-8 100 20804244 ns/op 50.40 MB/s 11 B/op 0 allocs/op
BenchmarkMatch_onepass_regex/32M-8 2 660706838 ns/op 50.79 MB/s 564 B/op 1 allocs/op
BenchmarkCompileOnepass-8 300000 4169 ns/op 4016 B/op 52 allocs/op
Usually the stdlib is faster, but not always. If you need the specific backtracking features I have found the performance is acceptable. If you don't use the backtracking features then you should just use regexp
from the stdlib.
from regexp2.
Related Issues (20)
- Why the replacement interface for []rune is not supported HOT 1
- Force timeout for testing? HOT 3
- Leaking go routines using `fastclock` HOT 6
- The matching results of strings containing Chinese characters are incorrect HOT 2
- No support for \p{unicode char class} that is supported by the Go stdlib regex package HOT 2
- No support for full unicode that is supported by the ECMAScript regex HOT 1
- xeger functionality HOT 1
- Question: Does this library support "categories" HOT 1
- Match loop cause high CPU usage HOT 2
- TestDeadline fails with go 1.21.3 HOT 4
- "cannot use []*syntax.regexNode as type []*struct" when using regexp2 inside traefik plugin HOT 1
- Line Terminator (Dollar sign) does not match as expected HOT 1
- Unable to see matches for a positive lookahead regex HOT 1
- MatchString() timeout stuck HOT 1
- FR: support Marshal/Unmarshal HOT 3
- FindStringMatch returns wrong index when using unicode characters HOT 2
- .Replace() wrong result with symbols $& in new content HOT 1
- Regex compilation breaks on certain grouping HOT 2
- Support dotAll flag HOT 9
- Is there any workaround for `split`? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from regexp2.