This crate can be used to search substrings in a string or search any sub-sequences in any sequence by using boyer-moore-magiclen (which is sometimes faster than boyer-moore and boyer-moore-horspool).
For binary data and UTF-8 data, use the BMByte
struct. For character sequences, use the BMCharacter
struct (however it is much slower than BMByte
).
Every BMXXX
has a from
associated function to create the instance by a search pattern (the needle).
For example,
```rust extern crate boyermooremagiclen;
use boyermooremagiclen::BMByte;
let bmb = BMByte::from("oocoo").unwrap(); ```
Now, we can search any binary data or UTF-8 data for the pattern oocoo
.
There are two search modes and two search directions. The first mode is called full text search, which finds the positions of the matched sub-sequences including the overlapping ones.
```rust extern crate boyermooremagiclen;
use boyermooremagiclen::BMByte;
let bmb = BMByte::from("oocoo").unwrap();
asserteq!(vec![1, 4], bmb.findfull_in("coocoocoocoo", 2)); ```
The other mode is called normal text search, which finds the positions of the matched sub-sequences excluding the overlapping ones.
```rust extern crate boyermooremagiclen;
use boyermooremagiclen::BMByte;
let bmb = BMByte::from("oocoo").unwrap();
asserteq!(vec![1, 7], bmb.findin("coocoocoocoo", 2)); ```
The search direction can be from the head (searching forward, find_xxx
) or from the tail (searching backward, rfind_xxx
).
```rust extern crate boyermooremagiclen;
use boyermooremagiclen::BMByte;
let bmb = BMByte::from("oocoo").unwrap();
asserteq!(vec![7, 1], bmb.rfindin("coocoocoocoo", 2)); ```
To search all results at a time, use the find_all_in
, rfind_all_in
, find_full_all_in
or rfind_full_all_in
method.
```rust extern crate boyermooremagiclen;
use boyermooremagiclen::BMByte;
let bmb = BMByte::from("oocoo").unwrap();
asserteq!(vec![7, 4, 1], bmb.rfindfullallin("coocoocoocoo")); ```
bash
cargo bench --bench full_text_search
or
bash
cargo bench --bench normal_text_search
https://crates.io/crates/boyer-moore-magiclen
https://docs.rs/boyer-moore-magiclen