Ce face Pattern
Pattern este interfața implementată de String și RegExp. Metodele de text care primesc un Pattern (split, contains, replaceAll, indexOf, startsWith) acceptă deci ori un text simplu, ori o expresie regulată.
Are două metode: allMatches, care găsește toate potrivirile, și matchAsPrefix(text, start), care verifică dacă modelul se potrivește exact la poziția start (nu oriunde după ea) și returnează potrivirea sau null.
Poți scrie și tu funcții care primesc Pattern, ca să accepte ambele forme. Rareori ai nevoie să implementezi interfața într-o clasă proprie.
Exemple
Exemplul 1: Același cod pentru String și RegExp
int numara(String text, Pattern ce) => ce.allMatches(text).length;
void main() {
var text = 'Ana are 3 mere, Ioana are 12 pere';
print(numara(text, 'are'));
print(numara(text, RegExp(r'\d+')));
print(text.split(RegExp(r',\s*')));
print(text.split(', '));
Pattern p = 'Ana';
print(p is String);
}
Rezultat
2
2
[Ana are 3 mere, Ioana are 12 pere]
[Ana are 3 mere, Ioana are 12 pere]
true
Exemplul 2: matchAsPrefix: potrivire la o poziție exactă
Un mic analizor citește pe rând numere și operatori, verificând ce se află exact la poziția curentă.
void main() {
final numar = RegExp(r'\d+');
final operator = RegExp(r'[+\-*/]');
var expresie = '12+7*30';
var poz = 0;
var bucati = <String>[];
while (poz < expresie.length) {
var m = numar.matchAsPrefix(expresie, poz) ?? operator.matchAsPrefix(expresie, poz);
if (m == null) break;
bucati.add(m[0]!);
poz = m.end;
}
print(bucati);
print(numar.matchAsPrefix('a12'));
print('Iași'.matchAsPrefix('Iași, România')?.end);
}
Rezultat
[12, +, 7, *, 30]
null
4
Greșeli frecvente
- Folosești
matchAsPrefixși te aștepți să caute mai departe în text, cafirstMatch. Verifică doar poziția dată.
Comenzi înrudite
RegExp: O expresie regulată: un model de text cu care cauți, verifici sau înlocuiești bucăți dintr-un text.String.allMatches: Găsește toate aparițiile unui text în alt text și le returnează ca obiecte Match, cu poziții.String.split: Împarte textul în bucăți la fiecare apariție a separatorului și returnează o listă de texte.