Pattern

Trait Pattern 

Source
pub trait Pattern: Sized {
    type Searcher<'a>: Searcher<'a>;

    // Required method
    fn into_searcher(self, haystack: &str) -> Self::Searcher<'_>;

    // Provided method
    fn is_prefix_of(self, haystack: &str) -> bool { ... }
}
🔬This is a nightly-only experimental API. (pattern #27721)
Expand description

A string pattern.

A Pattern expresses that the implementing type can be used as a string pattern for searching in a &str.

For example, both 'a' and "aa" are patterns that would match at index 1 in the string "baaaab".

The trait itself acts as a builder for an associated Searcher type, which does the actual work of finding occurrences of the pattern in a string.

Depending on the type of the pattern, the behavior of methods like [str::find] and [str::contains] can change. The table below describes some of those behaviors.

Pattern typeMatch condition
&stris substring
charis contained in string
&[char]any char in slice is contained in string
F: FnMut(char) -> boolF returns true for a char in string
&&stris substring
&Stringis substring

§Examples

// &str
assert_eq!("abaaa".find("ba"), Some(1));
assert_eq!("abaaa".find("bac"), None);

// char
assert_eq!("abaaa".find('a'), Some(0));
assert_eq!("abaaa".find('b'), Some(1));
assert_eq!("abaaa".find('c'), None);

// &[char; N]
assert_eq!("ab".find(&['b', 'a']), Some(0));
assert_eq!("abaaa".find(&['a', 'z']), Some(0));
assert_eq!("abaaa".find(&['c', 'd']), None);

// &[char]
assert_eq!("ab".find(&['b', 'a'][..]), Some(0));
assert_eq!("abaaa".find(&['a', 'z'][..]), Some(0));
assert_eq!("abaaa".find(&['c', 'd'][..]), None);

// FnMut(char) -> bool
assert_eq!("abcdef_z".find(|ch| ch > 'd' && ch < 'y'), Some(4));
assert_eq!("abcddd_z".find(|ch| ch > 'd' && ch < 'y'), None);

Required Associated Types§

Source

type Searcher<'a>: Searcher<'a>

🔬This is a nightly-only experimental API. (pattern #27721)

Associated searcher for this pattern

Required Methods§

Source

fn into_searcher(self, haystack: &str) -> Self::Searcher<'_>

🔬This is a nightly-only experimental API. (pattern #27721)

Constructs the associated searcher from self and the haystack to search in.

Provided Methods§

Source

fn is_prefix_of(self, haystack: &str) -> bool

🔬This is a nightly-only experimental API. (pattern #27721)

Checks whether the pattern matches at the front of the haystack

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<'b> Pattern for &'b str

Non-allocating substring search.

Will handle the pattern "" as returning empty matches at each character boundary.

§Examples

assert_eq!("Hello world".find("world"), Some(6));
Source§

type Searcher<'a> = StrSearcher<'a, 'b>