#字符串搜索 #搜索算法 #搜索 #文本搜索 #字符串 #搜索模式 #boyer-moore-horspool

无需 std boyer-moore-magiclen

Boyer-Moore-MagicLen,一个用 Rust 实现的快速字符串搜索算法

29 个版本

0.2.20 2023年12月5日
0.2.19 2023年11月26日
0.2.18 2023年9月11日
0.2.16 2022年11月2日
0.2.1 2019年7月29日

#2 in #搜索算法

Download history 2867/week @ 2024-04-23 2448/week @ 2024-04-30 2209/week @ 2024-05-07 1828/week @ 2024-05-14 2294/week @ 2024-05-21 2716/week @ 2024-05-28 2954/week @ 2024-06-04 3203/week @ 2024-06-11 3232/week @ 2024-06-18 3415/week @ 2024-06-25 3406/week @ 2024-07-02 4415/week @ 2024-07-09 4420/week @ 2024-07-16 3880/week @ 2024-07-23 4570/week @ 2024-07-30 4517/week @ 2024-08-06

18,318 每月下载量
用于 sm_motion_photo

MIT 许可证

45KB
867 代码行

Boyer-Moore-MagicLen

CI

此crate可以使用boyer-moore-magiclen(有时比boyer-moore和boyer-moore-horspool更快)在字符串中搜索子字符串或在任何序列中搜索任何子序列。

用法

对于二进制数据和UTF-8数据,使用BMByte结构。对于字符序列,使用BMCharacter结构(然而它比BMByte慢得多)。BMCharacter结构需要标准库支持,并且您必须启用character功能才能使其可用。

每个BMXXX都有一个关联的from函数,可以通过搜索模式(即针)创建实例。

例如,

use boyer_moore_magiclen::BMByte;

let bmb = BMByte::from("oocoo").unwrap();

现在,我们可以搜索任何二进制数据或UTF-8数据中的模式oocoo

有两种搜索模式和两种搜索方向。第一种模式称为全文搜索,它找到匹配的子序列的位置,包括重叠的。

use boyer_moore_magiclen::BMByte;

let bmb = BMByte::from("oocoo").unwrap();

assert_eq!(vec![1, 4], bmb.find_full_in("coocoocoocoo", 2));

另一种模式称为普通文本搜索,它找到匹配的子序列的位置,不包括重叠的。

use boyer_moore_magiclen::BMByte;

let bmb = BMByte::from("oocoo").unwrap();

assert_eq!(vec![1, 7], bmb.find_in("coocoocoocoo", 2));

搜索方向可以是从头(向前搜索,find_xxx)或从尾(向后搜索,rfind_xxx)。

use boyer_moore_magiclen::BMByte;

let bmb = BMByte::from("oocoo").unwrap();

assert_eq!(vec![7, 1], bmb.rfind_in("coocoocoocoo", 2));

要一次搜索所有结果,请使用find_all_inrfind_all_infind_full_all_inrfind_full_all_in方法。

use boyer_moore_magiclen::BMByte;

let bmb = BMByte::from("oocoo").unwrap();

assert_eq!(vec![7, 4, 1], bmb.rfind_full_all_in("coocoocoocoo"));

基准测试

cargo bench --bench full_text_search

cargo bench --bench normal_text_search

Crates.io

https://crates.io/crates/boyer-moore-magiclen

文档

https://docs.rs/boyer-moore-magiclen

许可证

MIT

依赖关系