# [−][src]Trait core::str::pattern::Searcher

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

        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)

API not fully fleshed out and ready to be stabilized

A searcher for a string pattern.

This trait provides methods for searching for non-overlapping matches of a pattern starting from the front (left) of a string.

It will be implemented by associated `Searcher` types of the `Pattern` trait.

The trait is marked unsafe because the indices returned by the `next()` methods are required to lie on valid utf8 boundaries in the haystack. This enables consumers of this trait to slice the haystack without additional runtime checks.

## Required methods

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

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

API not fully fleshed out and ready to be stabilized

Getter for the underlying string to be searched in

Will always return the same `&str`

### `fn next(&mut self) -> SearchStep`

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

API not fully fleshed out and ready to be stabilized

Performs the next search step starting from the front.

- Returns `Match(a, b)` if `haystack[a..b]` matches the pattern.
- Returns `Reject(a, b)` if `haystack[a..b]` can not match the pattern, even partially.
- Returns `Done` if every byte of the haystack has been visited

The stream of `Match` and `Reject` values up to a `Done` will contain index ranges that are adjacent, non-overlapping, covering the whole haystack, and laying on utf8 boundaries.

A `Match` result needs to contain the whole matched pattern, however `Reject` results may be split up into arbitrary many adjacent fragments. Both ranges may have zero length.

As an example, the pattern `"aaa"` and the haystack `"cbaaaaab"` might produce the stream `[Reject(0, 1), Reject(1, 2), Match(2, 5), Reject(5, 8)]`

Loading content...

## Provided methods

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

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

API not fully fleshed out and ready to be stabilized

Find the next `Match` result. See `next()`

Unlike next(), there is no guarantee that the returned ranges of this and next_reject will overlap. This will return (start_match, end_match), where start_match is the index of where the match begins, and end_match is the index after the end of the match.

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

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

API not fully fleshed out and ready to be stabilized

Find the next `Reject` result. See `next()` and `next_match()`

Unlike next(), there is no guarantee that the returned ranges of this and next_match will overlap.

Loading content...

## Implementors

### `impl<'a> Searcher<'a> for CharSearcher<'a>`[src]

#### `fn haystack(&self) -> &'a str`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next(&mut self) -> SearchStep`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next_match(&mut self) -> Option<(usize, usize)>`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next_reject(&mut self) -> Option<(usize, usize)>`[src]

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

API not fully fleshed out and ready to be stabilized

### `impl<'a, 'b> Searcher<'a> for CharSliceSearcher<'a, 'b>`[src]

#### `fn haystack(&self) -> &'a str`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next(&mut self) -> SearchStep`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next_match(&mut self) -> Option<(usize, usize)>`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next_reject(&mut self) -> Option<(usize, usize)>`[src]

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

API not fully fleshed out and ready to be stabilized

### `impl<'a, 'b> Searcher<'a> for StrSearcher<'a, 'b>`[src]

#### `fn haystack(&self) -> &'a str`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next(&mut self) -> SearchStep`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next_match(&mut self) -> Option<(usize, usize)>`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next_reject(&mut self) -> Option<(usize, usize)>`[src]

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

API not fully fleshed out and ready to be stabilized

### `impl<'a, F> Searcher<'a> for CharPredicateSearcher<'a, F> where
F: FnMut(char) -> bool,` [src]

#### `fn haystack(&self) -> &'a str`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next(&mut self) -> SearchStep`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next_match(&mut self) -> Option<(usize, usize)>`[src]

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

API not fully fleshed out and ready to be stabilized

#### `fn next_reject(&mut self) -> Option<(usize, usize)>`[src]

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

API not fully fleshed out and ready to be stabilized

Loading content...

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)