pub trait Pattern: Sized {
type Searcher<'a>: Searcher<'a>;
// Required methods
fn into_searcher(self, haystack: &str) -> Self::Searcher<'_>;
fn as_utf8_pattern(&self) -> Option<Utf8Pattern<'_>>;
// Provided methods
fn is_contained_in(self, haystack: &str) -> bool { ... }
fn is_prefix_of(self, haystack: &str) -> bool { ... }
fn is_suffix_of<'a>(self, haystack: &'a str) -> bool
where Self::Searcher<'a>: ReverseSearcher<'a> { ... }
fn strip_prefix_of(self, haystack: &str) -> Option<&str> { ... }
fn strip_suffix_of<'a>(self, haystack: &'a str) -> Option<&'a str>
where Self::Searcher<'a>: ReverseSearcher<'a> { ... }
}
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 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);
Required Associated Types§
Required Methods§
Sourcefn into_searcher(self, haystack: &str) -> Self::Searcher<'_>
🔬This is a nightly-only experimental API. (pattern
#27721)
fn into_searcher(self, haystack: &str) -> Self::Searcher<'_>
pattern
#27721)Constructs the associated searcher from
self
and the haystack
to search in.
Sourcefn as_utf8_pattern(&self) -> Option<Utf8Pattern<'_>>
🔬This is a nightly-only experimental API. (pattern
#27721)
fn as_utf8_pattern(&self) -> Option<Utf8Pattern<'_>>
pattern
#27721)Returns the pattern as utf-8 bytes if possible.
Provided Methods§
Sourcefn is_contained_in(self, haystack: &str) -> bool
🔬This is a nightly-only experimental API. (pattern
#27721)
fn is_contained_in(self, haystack: &str) -> bool
pattern
#27721)Checks whether the pattern matches anywhere in the haystack
Sourcefn is_prefix_of(self, haystack: &str) -> bool
🔬This is a nightly-only experimental API. (pattern
#27721)
fn is_prefix_of(self, haystack: &str) -> bool
pattern
#27721)Checks whether the pattern matches at the front of the haystack
Sourcefn is_suffix_of<'a>(self, haystack: &'a str) -> boolwhere
Self::Searcher<'a>: ReverseSearcher<'a>,
🔬This is a nightly-only experimental API. (pattern
#27721)
fn is_suffix_of<'a>(self, haystack: &'a str) -> boolwhere
Self::Searcher<'a>: ReverseSearcher<'a>,
pattern
#27721)Checks whether the pattern matches at the back of the haystack
Sourcefn strip_prefix_of(self, haystack: &str) -> Option<&str>
🔬This is a nightly-only experimental API. (pattern
#27721)
fn strip_prefix_of(self, haystack: &str) -> Option<&str>
pattern
#27721)Removes the pattern from the front of haystack, if it matches.
Sourcefn strip_suffix_of<'a>(self, haystack: &'a str) -> Option<&'a str>where
Self::Searcher<'a>: ReverseSearcher<'a>,
🔬This is a nightly-only experimental API. (pattern
#27721)
fn strip_suffix_of<'a>(self, haystack: &'a str) -> Option<&'a str>where
Self::Searcher<'a>: ReverseSearcher<'a>,
pattern
#27721)Removes the pattern from the back of haystack, if it matches.
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 Pattern for char
impl Pattern for char
type Searcher<'a> = CharSearcher<'a>
Source§impl<'b> Pattern for &'b str
impl<'b> Pattern for &'b str
Non-allocating substring search.
Will handle the pattern ""
as returning empty matches at each character
boundary.
§Examples
type Searcher<'a> = StrSearcher<'a, 'b>
Source§impl<'b> Pattern for &'b String
impl<'b> Pattern for &'b String
A convenience impl that delegates to the impl for &str
.
§Examples
Source§impl<'b> Pattern for &'b [char]
impl<'b> Pattern for &'b [char]
type Searcher<'a> = CharSliceSearcher<'a, 'b>
Source§impl<'b, 'c> Pattern for &'c &'b str
impl<'b, 'c> Pattern for &'c &'b str
Delegates to the &str
impl.