Trait core::str::pattern::Searcher

source ·
pub unsafe trait Searcher<'a> {
    // Required methods
    fn haystack(&self) -> &'a str;
    fn next(&mut self) -> SearchStep;

    // Provided methods
    fn next_match(&mut self) -> Option<(usize, usize)> { ... }
    fn next_reject(&mut self) -> Option<(usize, usize)> { ... }
}
🔬This is a nightly-only experimental API. (pattern #27721)
Expand description

字符串模式的搜索者。

这个 trait 提供了从字符串的前面 (左边) 开始搜索模式的非重叠匹配的方法。

将通过 Pattern trait 的相关 Searcher 类型实现。

这个 trait 被标记为不安全,因为 next() 方法返回的索引必须位于 haystack 中的有效 utf8 边界上。 这使 trait 的使用者可以对 haystack 进行切片,而无需进行其他运行时检查。

Required Methods§

source

fn haystack(&self) -> &'a str

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

要在其中搜索的底层字符串的 Getter

总是返回相同的 &str

source

fn next(&mut self) -> SearchStep

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

从头开始执行下一个搜索步骤。

  • 如果 haystack[a..b] 与模式匹配,则返回 Match(a, b)
  • 如果 haystack[a..b] 甚至部分不匹配,则返回 Reject(a, b)
  • 如果已访问 haystack 的每个字节,则返回 Done

直到 DoneMatchReject 值流将包含相邻,不重叠,覆盖整个 haystack 并位于 utf8 边界上的索引范围。

Match 结果需要包含整个匹配的模式,但是 Reject 结果可以分为任意多个相邻的片段。两个范围的长度都可以为零。

例如,模式 "aaa" 和 haystack "cbaaaaab" 可能产生流 [Reject(0, 1), Reject(1, 2), Match(2, 5), Reject(5, 8)]

Provided Methods§

source

fn next_match(&mut self) -> Option<(usize, usize)>

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

查找下一个 Match 结果。请参见 next()

next() 不同,不能保证此和 next_reject 的返回范围会重叠。 这将返回 (start_match, end_match),其中 start_match 是匹配开始的索引,end_match 是匹配结束后的索引。

source

fn next_reject(&mut self) -> Option<(usize, usize)>

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

查找下一个 Reject 结果。请参见 next()next_match()

next() 不同,不能保证此和 next_match 的返回范围会重叠。

Implementors§

source§

impl<'a> Searcher<'a> for CharSearcher<'a>

source§

impl<'a, 'b> Searcher<'a> for CharSliceSearcher<'a, 'b>

source§

impl<'a, 'b> Searcher<'a> for StrSearcher<'a, 'b>

source§

impl<'a, 'b, const N: usize> Searcher<'a> for CharArrayRefSearcher<'a, 'b, N>

source§

impl<'a, F> Searcher<'a> for CharPredicateSearcher<'a, F>where F: FnMut(char) -> bool,

source§

impl<'a, const N: usize> Searcher<'a> for CharArraySearcher<'a, N>