pub trait Pattern<'a> {
type Searcher: Searcher<'a>;
fn into_searcher(self, haystack: &'a str) -> Self::Searcher;
fn is_contained_in(self, haystack: &'a str) -> bool { ... }
fn is_prefix_of(self, haystack: &'a str) -> bool { ... }
fn is_suffix_of(self, haystack: &'a str) -> bool
where
Self::Searcher: ReverseSearcher<'a>,
{ ... }
fn strip_prefix_of(self, haystack: &'a str) -> Option<&'a str> { ... }
fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str>
where
Self::Searcher: ReverseSearcher<'a>,
{ ... }
}
Expand description
A string pattern.
A Pattern<'a>
expresses that the implementing type
can be used as a string pattern for searching in a &'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 behaviour of methods like
str::find
and str::contains
can change. The table below describes
some of those behaviours.
Pattern type | Match condition |
---|---|
&str | is substring |
char | is contained in string |
&[char] | any char in slice is contained in string |
F: FnMut(char) -> bool | F returns true for a char in string |
&&str | is substring |
&String | is 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);
RunAssociated Types
Required methods
fn into_searcher(self, haystack: &'a str) -> Self::Searcher
fn into_searcher(self, haystack: &'a str) -> Self::Searcher
Constructs the associated searcher from
self
and the haystack
to search in.
Provided methods
fn is_contained_in(self, haystack: &'a str) -> bool
fn is_contained_in(self, haystack: &'a str) -> bool
Checks whether the pattern matches anywhere in the haystack
fn is_prefix_of(self, haystack: &'a str) -> bool
fn is_prefix_of(self, haystack: &'a str) -> bool
Checks whether the pattern matches at the front of the haystack
fn is_suffix_of(self, haystack: &'a str) -> bool where
Self::Searcher: ReverseSearcher<'a>,
fn is_suffix_of(self, haystack: &'a str) -> bool where
Self::Searcher: ReverseSearcher<'a>,
Checks whether the pattern matches at the back of the haystack
fn strip_prefix_of(self, haystack: &'a str) -> Option<&'a str>
fn strip_prefix_of(self, haystack: &'a str) -> Option<&'a str>
Removes the pattern from the front of haystack, if it matches.
fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
Self::Searcher: ReverseSearcher<'a>,
fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
Self::Searcher: ReverseSearcher<'a>,
Removes the pattern from the back of haystack, if it matches.
Implementations on Foreign Types
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));
RunChecks whether the pattern matches at the front of the haystack.
Removes the pattern from the front of haystack, if it matches.
Checks whether the pattern matches at the back of the haystack.
Removes the pattern from the back of haystack, if it matches.
type Searcher = StrSearcher<'a, 'b>
type Searcher = StrSearcher<'a, 'b>
Searches for chars that are equal to any of the char
s in the array.
Examples
assert_eq!("Hello world".find(&['l', 'l']), Some(2));
assert_eq!("Hello world".find(&['l', 'l']), Some(2));
Runtype Searcher = CharArrayRefSearcher<'a, 'b, N>
type Searcher = CharArrayRefSearcher<'a, 'b, N>
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
CharArrayRefSearcher<'a, 'b, N>: ReverseSearcher<'a>,
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
CharArrayRefSearcher<'a, 'b, N>: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
CharArrayRefSearcher<'a, 'b, N>: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
CharArrayRefSearcher<'a, 'b, N>: ReverseSearcher<'a>,
Searches for chars that are equal to a given char
.
Examples
assert_eq!("Hello world".find('o'), Some(4));
Runtype Searcher = CharSearcher<'a>
type Searcher = CharSearcher<'a>
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
<char as Pattern<'a>>::Searcher: ReverseSearcher<'a>,
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
<char as Pattern<'a>>::Searcher: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
<char as Pattern<'a>>::Searcher: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
<char as Pattern<'a>>::Searcher: ReverseSearcher<'a>,
Searches for chars that are equal to any of the char
s in the array.
Examples
assert_eq!("Hello world".find(['l', 'l']), Some(2));
assert_eq!("Hello world".find(['l', 'l']), Some(2));
Runtype Searcher = CharArraySearcher<'a, N>
type Searcher = CharArraySearcher<'a, N>
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
CharArraySearcher<'a, N>: ReverseSearcher<'a>,
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
CharArraySearcher<'a, N>: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
CharArraySearcher<'a, N>: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
CharArraySearcher<'a, N>: ReverseSearcher<'a>,
Delegates to the &str
impl.
type Searcher = StrSearcher<'a, 'b>
type Searcher = StrSearcher<'a, 'b>
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
StrSearcher<'a, 'b>: ReverseSearcher<'a>,
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
StrSearcher<'a, 'b>: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
StrSearcher<'a, 'b>: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
StrSearcher<'a, 'b>: ReverseSearcher<'a>,
Searches for chars that are equal to any of the char
s in the slice.
Examples
assert_eq!("Hello world".find(&['l', 'l'] as &[_]), Some(2));
assert_eq!("Hello world".find(&['l', 'l'][..]), Some(2));
Runtype Searcher = CharSliceSearcher<'a, 'b>
type Searcher = CharSliceSearcher<'a, 'b>
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
CharSliceSearcher<'a, 'b>: ReverseSearcher<'a>,
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
CharSliceSearcher<'a, 'b>: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
CharSliceSearcher<'a, 'b>: ReverseSearcher<'a>,
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
CharSliceSearcher<'a, 'b>: ReverseSearcher<'a>,
Implementors
Searches for char
s that match the given predicate.
Examples
assert_eq!("Hello world".find(char::is_uppercase), Some(0));
assert_eq!("Hello world".find(|c| "aeiou".contains(c)), Some(1));
Run