#regex #lazy #cache


Lazy and cached regular expressions

8 releases

0.2.1 Oct 16, 2020
0.2.0 May 22, 2018
0.1.6 Mar 8, 2018
0.1.5 Jul 12, 2017

#226 in Caching

Download history 12149/week @ 2023-06-08 13200/week @ 2023-06-15 14173/week @ 2023-06-22 15072/week @ 2023-06-29 15173/week @ 2023-07-06 15597/week @ 2023-07-13 17915/week @ 2023-07-20 16619/week @ 2023-07-27 16226/week @ 2023-08-03 15367/week @ 2023-08-10 20106/week @ 2023-08-17 21865/week @ 2023-08-24 21063/week @ 2023-08-31 22345/week @ 2023-09-07 23428/week @ 2023-09-14 23168/week @ 2023-09-21

94,758 downloads per month
Used in 23 crates (2 directly)

MIT license

382 lines

regex-cache Crates.io regex-cache MIT Build Status

This crate provides a library for caching or lazily creating regular expressions.

Lazy regular expressions are backed by a OnceMutex, while the regular expression cache is backed by a Least Recently Used cache.

Why not lazy_static!?

lazy_static! is great but it's only usable when you know what your regular expression is.

In some cases you're loading an insane number of regular expressions (looking at you libphonenumber) that you might eventually use but don't actually want to store as String since that makes you lose type information and ease of use.

When to use LazyRegex

When you have many regular expressions you don't want to use instantly and don't care about delaying the regular expression compilation.

When to use RegexCache

When you want to limit the number of active regular expressions, the RegexCache only keeps around a specified number of actively used regular expressions.

Since it's an LRU cache having a small limit and using different regular expressions every time ends up wasting memory and time for nothing.

When to use CachedRegex

When you want to transparently use a RegexCache and still have an easy to use and typed regular expression instead of storing a String to then compile with the RegexCache.

Keep in mind what's stored inside a CachedRegex is an Arc<Mutex<RegexCache>>, which means there is locking involved when calling any methods on CachedRegex.

For technical reasons there is no way to get a &Regex out of a CachedRegex and some methods from Regex aren't usable on a CachedRegex, it should still be fine for most uses.


~54K SLoC