String.allMatches în Dart

Găsește toate aparițiile unui text în alt text și le returnează ca obiecte Match, cu poziții.

Sintaxă
Iterable<Match> allMatches(String string, [int start = 0])

Ce face String.allMatches

Un String este și un Pattern, deci poate căuta în alt text. 'ana'.allMatches(text) returnează toate aparițiile textului 'ana' în text. Atenție la ordine: textul pe care apelezi metoda este ce cauți, iar argumentul este unde cauți.

Fiecare rezultat este un Match cu start (poziția de început), end (poziția de după ultimul caracter) și group(0) (textul găsit). Aparițiile nu se suprapun: în 'aaaa', textul 'aa' apare de 2 ori, nu de 3.

Pentru a număra rapid aparițiile: cuvant.allMatches(text).length. Pentru căutări cu modele (cifre, cuvinte) folosește RegExp.allMatches, care funcționează la fel.

Parametri

Parametru Descriere
string Textul în care se caută.
start Poziția de la care începe căutarea.

Ce returnează

Un Iterable<Match> (leneș: căutarea se face pe măsură ce îl parcurgi).

Exemple

Exemplul 1: Numărarea aparițiilor

Căutarea face diferența între litere mari și mici: „Ana” de la început nu este găsit, dar „ana” din „Ioana” și „Dana” da.

void main() {
  var text = 'Ana și Ioana au plecat la Dana';
  var gasite = 'ana'.allMatches(text);
  print(gasite.length);
  for (var m in gasite) {
    print('poziția ${m.start}-${m.end}: ${m.group(0)}');
  }
  print('aa'.allMatches('aaaa').length);
}

Rezultat

2
poziția 9-12: ana
poziția 27-30: ana
2

Exemplul 2: Cuvântul cel mai des întâlnit

void main() {
  var text = 'mere pere mere prune mere pere';
  var cuvinte = text.split(' ').toSet();
  for (var c in cuvinte) {
    var n = c.allMatches(text).length;
    print('$c: $n');
  }
}

Rezultat

mere: 3
pere: 2
prune: 1

Greșeli frecvente

  • Inversezi argumentele: text.allMatches('ana') caută tot text în 'ana' și nu găsește nimic.
  • Numeri cu allMatches un cuvânt care apare și în alte cuvinte ('ana' în 'Ioana'). Folosește RegExp(r'\bana\b').

Comenzi înrudite

  • RegExp.allMatches: Returnează toate potrivirile modelului în text, ca o colecție de obiecte RegExpMatch.
  • Pattern: Interfața comună pentru String și RegExp: orice lucru care poate fi căutat într-un text.
  • String.indexOf: Returnează poziția primei (indexOf) sau ultimei (lastIndexOf) apariții a unui text, sau -1 dacă lipsește.