pub struct Finder { /* private fields */ }
Expand description
Provides methods to search text.
Implementations§
Source§impl Finder
impl Finder
Sourcepub fn new(syntax: Syntax, a: Kind) -> Self
pub fn new(syntax: Syntax, a: Kind) -> Self
Create a new instance of Finder with the provided Syntax and Algorithm.
The Finder instance will use the algorithm described by Kind to search for patterns.
Sourcepub fn next(&self, text: &str, at: usize) -> Option<(usize, usize, usize)>
pub fn next(&self, text: &str, at: usize) -> Option<(usize, usize, usize)>
Search the given text starting at ‘n’ for a match on any pattern of the given syntax.
§Examples
use morel::{Syntax, Finder, Kind};
// We want to search for these patterns.
// Each pattern has a unique (within the vec) identifier and a literal value.
let patterns = vec![(0, "abc".into()), (1, "def".into())];
// Patterns are cloned to allow for an assertion further down.
let syntax = Syntax::new(patterns.clone());
let mut finder = Finder::new(syntax, Kind::AhoCorasick);
// The text to be searched.
let text = "123abc";
let result = finder.next(text, 0);
// A match is found.
assert_eq!(result, Some((0, 3, 6)));
let unwrapped = result.unwrap();
let id = unwrapped.0;
let start = unwrapped.1;
let end = unwrapped.2;
// The text between the indices is equal to the pattern literal.
assert_eq!(
&text[start..end],
patterns.into_iter().find(|e| e.0 == id).unwrap().1
);
Sourcepub fn starts(&self, text: &str, at: usize) -> Option<(usize, usize)>
pub fn starts(&self, text: &str, at: usize) -> Option<(usize, usize)>
Determine if the given text starting at ‘n’ begins with a match on any pattern of the given syntax.
§Examples
use morel::{Syntax, Finder, Kind};
// We want to search for these patterns.
// Each pattern has a unique (within the vec) identifier and a literal value.
let patterns = vec![(0, "abc".into()), (1, "def".into())];
// Patterns are cloned to allow for an assertion further down.
let syntax = Syntax::new(patterns.clone());
let finder = Finder::new(syntax, Kind::AhoCorasick);
// The text to be searched.
let text = "abc123";
let result = finder.starts(text, 0);
// A match is found.
assert_eq!(result, Some((0, 3)));
let unwrapped = result.unwrap();
let id = unwrapped.0;
let length = unwrapped.1;
// The text between the indices is equal to the pattern literal.
assert_eq!(
&text[0..length],
patterns.into_iter().find(|e| e.0 == id).unwrap().1
);
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Finder
impl RefUnwindSafe for Finder
impl Send for Finder
impl Sync for Finder
impl Unpin for Finder
impl UnwindSafe for Finder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more