pub fn is_match<C: Cursor>(
vm: &PikeVM,
cache: &mut Cache,
input: &mut Input<C>,
) -> bool
Expand description
Returns true if and only if this PikeVM
matches the given haystack.
This routine may short circuit if it knows that scanning future
input will never lead to a different result. In particular, if the
underlying NFA enters a match state, then this routine will return
true
immediately without inspecting any future input. (Consider how
this might make a difference given the regex a+
on the haystack
aaaaaaaaaaaaaaa
. This routine can stop after it sees the first a
,
but routines like find
need to continue searching because +
is
greedy by default.)
§Example
This shows basic usage:
use regex_automata::nfa::thompson::pikevm::PikeVM;
let re = PikeVM::new("foo[0-9]+bar")?;
let mut cache = re.create_cache();
assert!(re.is_match(&mut cache, "foo12345bar"));
assert!(!re.is_match(&mut cache, "foobar"));
§Example: consistency with search APIs
is_match
is guaranteed to return true
whenever find
returns a
match. This includes searches that are executed entirely within a
codepoint:
use regex_automata::{nfa::thompson::pikevm::PikeVM, Input};
let re = PikeVM::new("a*")?;
let mut cache = re.create_cache();
assert!(!re.is_match(&mut cache, Input::new("☃").span(1..2)));
Notice that when UTF-8 mode is disabled, then the above reports a match because the restriction against zero-width matches that split a codepoint has been lifted:
use regex_automata::{nfa::thompson::{pikevm::PikeVM, NFA}, Input};
let re = PikeVM::builder()
.thompson(NFA::config().utf8(false))
.build("a*")?;
let mut cache = re.create_cache();
assert!(re.is_match(&mut cache, Input::new("☃").span(1..2)));