#regex #lazy-evaluation #cache

regex-cache

延迟和缓存正则表达式

8 个版本

0.2.1 2020年10月16日
0.2.0 2018年5月22日
0.1.6 2018年3月8日
0.1.5 2017年7月12日

#137 in 缓存

Download history 28313/week @ 2024-03-14 29092/week @ 2024-03-21 26611/week @ 2024-03-28 30080/week @ 2024-04-04 32262/week @ 2024-04-11 31834/week @ 2024-04-18 29348/week @ 2024-04-25 31091/week @ 2024-05-02 33135/week @ 2024-05-09 39067/week @ 2024-05-16 31645/week @ 2024-05-23 27938/week @ 2024-05-30 30888/week @ 2024-06-06 28700/week @ 2024-06-13 30102/week @ 2024-06-20 19363/week @ 2024-06-27

114,658 每月下载
用于 33 个 Crates (2 直接)

MIT 许可证

25KB
382 代码行

regex-cache Crates.io regex-cache MIT 构建状态

此 crate 提供了一个用于缓存或延迟创建正则表达式的库。

延迟正则表达式由 OnceMutex 支持,而正则表达式缓存则由最少使用(LRU)缓存支持。

为什么不使用 lazy_static!

lazy_static! 很好,但它只在你知道正则表达式是什么的时候才可用。

在某些情况下,你可能正在加载大量正则表达式(例如 libphonenumber),你最终可能会使用它们,但不想将它们作为 String 存储,因为这会使你失去类型信息并降低使用便捷性。

何时使用 LazyRegex

当你有很多正则表达式不希望立即使用,且不关心延迟正则表达式编译时。

何时使用 RegexCache

当你想要限制活动正则表达式的数量时,RegexCache 只保留一定数量的活动正则表达式。

由于它是一个 LRU 缓存,因此有一个小的限制,每次使用不同的正则表达式最终会浪费内存和时间。

何时使用 CachedRegex

当你想透明地使用 RegexCache 并仍然使用易于使用和具有类型的正则表达式,而不是将 String 存储起来以便随后与 RegexCache 编译。

请注意,存储在 CachedRegex 中的内容是一个 Arc<Mutex<RegexCache>>,这意味着在调用 CachedRegex 的任何方法时都会涉及到锁定。

由于技术原因,无法从 CachedRegex 中获取 &Regex,并且一些来自 Regex 的方法在 CachedRegex 上不可用,但对于大多数用途来说仍然应该没问题。

依赖项

~3.5MB
~70K SLoC