str::matches în Rust

Iterator cu toate bucățile din text care se potrivesc cu modelul (fără suprapuneri); util pentru numărare.

Sintaxă
pub fn matches<P: Pattern>(&self, pat: P) -> Matches<'_, P>

Ce face str::matches

matches(pat) dă, în ordine, fiecare apariție a modelului ca &str. Aparițiile nu se suprapun: în "aaa", modelul "aa" apare o singură dată. Cel mai des se folosește cu count(), pentru a afla de câte ori apare ceva.

Cu o funcție ca model, matches dă caracterele potrivite, ca bucăți de text. Dacă ai nevoie și de pozițiile aparițiilor, folosește match_indices.

Parametri

Parametru Descriere
pat Textul, caracterul sau funcția căutată.

Ce returnează

Un iterator de &str.

Exemple

Exemplul 1: De câte ori apare un cuvânt

fn main() {
    let text = "ana are mere, ana are pere, Ana are prune";
    println!("'ana': {}", text.matches("ana").count());
    println!("'are': {}", text.matches("are").count());
    println!("'aa' în 'aaa': {}", "aaa".matches("aa").count());
    println!("{:?}", text.match_indices("are").map(|(i, _)| i).collect::<Vec<_>>());
}

Rezultat

'ana': 2
'are': 3
'aa' în 'aaa': 1
[4, 18, 32]

Exemplul 2: Cifrele dintr-un text

fn main() {
    let s = "Tel: 0742-12-34";
    let cifre: Vec<&str> = s.matches(char::is_numeric).collect();
    println!("{cifre:?}");
    println!("{}", cifre.concat());
}

Rezultat

["0", "7", "4", "2", "1", "2", "3", "4"]
07421234

Greșeli frecvente

  • Te aștepți la potriviri suprapuse. matches continuă căutarea după finalul potrivirii anterioare.

Comenzi înrudite

  • str::find: Caută prima (find) sau ultima (rfind) apariție și returnează poziția ei în octeți, sau None.
  • str::contains: Verifică dacă textul conține undeva un text, un caracter sau un caracter care respectă o condiție.
  • str::split: Împarte textul în bucăți la fiecare apariție a unui separator; rsplit dă bucățile de la coadă spre început.