pub trait Pattern: Sized {
type Searcher<'a>: Searcher<'a>;
// Required method
fn into_searcher(self, haystack: &str) -> Self::Searcher<'_>;
// 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> { ... }
fn as_utf8_pattern(&self) -> Option<Utf8Pattern<'_>> { ... }
}
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 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.
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.
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.
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
Searches for chars that are equal to a given char
.
impl Pattern for char
Searches for chars that are equal to a given char
.
ยงExamples
type Searcher<'a> = CharSearcher<'a>
Sourceยงimpl<'b> Pattern for &'b str
Non-allocating substring search.
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
A convenience impl that delegates to the impl for &str
.
impl<'b> Pattern for &'b String
A convenience impl that delegates to the impl for &str
.
ยงExamples
Sourceยงimpl<'b> Pattern for &'b [char]
Searches for chars that are equal to any of the char
s in the slice.
impl<'b> Pattern for &'b [char]
Searches for chars that are equal to any of the char
s in the slice.
ยงExamples
type Searcher<'a> = CharSliceSearcher<'a, 'b>
Sourceยงimpl<'b, 'c> Pattern for &'c &'b str
Delegates to the &str
impl.
impl<'b, 'c> Pattern for &'c &'b str
Delegates to the &str
impl.
type Searcher<'a> = StrSearcher<'a, 'b>
Sourceยงimpl<'b, const N: usize> Pattern for &'b [char; N]
Searches for chars that are equal to any of the char
s in the array.
impl<'b, const N: usize> Pattern for &'b [char; N]
Searches for chars that are equal to any of the char
s in the array.