Function regex_cursor::engines::pikevm::is_match
source · pub fn is_match<C: Cursor>(
vm: &PikeVM,
cache: &mut Cache,
input: &mut Input<C>
) -> boolExpand 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)));