RegExp.firstMatch în Dart

Text (String, StringBuffer, RegExp) Dart 1.0 (returnează RegExpMatch din Dart 2.3)

Caută prima potrivire a modelului în text și o returnează cu poziții și grupuri, sau null dacă nu există.

Sintaxă
RegExpMatch? firstMatch(String input)

Ce face RegExp.firstMatch

firstMatch(text) returnează un obiect RegExpMatch pentru prima potrivire, sau null. Din el afli textul găsit (m[0]), grupurile din paranteze (m[1], m[2]…), pozițiile start și end și grupurile cu nume.

Pentru că rezultatul poate fi null, verifică-l înainte de folosire: cu if (m != null), cu ?. sau cu un pattern if (re.firstMatch(t) case final m?). Este metoda potrivită pentru a „desface” un text structurat (o dată, un cod, o adresă) în bucăți.

Parametri

Parametru Descriere
input Textul în care se caută.

Ce returnează

Un RegExpMatch?.

Exemple

Exemplul 1: Desfacerea unei date

void main() {
  final data = RegExp(r'(\d{1,2})\.(\d{1,2})\.(\d{4})');
  var m = data.firstMatch('Examenul este pe 15.6.2026, la ora 9.');
  if (m != null) {
    print('Găsit: ${m[0]} la poziția ${m.start}');
    print('zi=${m[1]}, lună=${m[2]}, an=${m[3]}');
    var d = DateTime(int.parse(m[3]!), int.parse(m[2]!), int.parse(m[1]!));
    print(d.weekday == DateTime.monday ? 'Este luni' : 'Ziua ${d.weekday}');
  }
  print(data.firstMatch('fără dată'));
}

Rezultat

Găsit: 15.6.2026 la poziția 17
zi=15, lună=6, an=2026
Este luni
null

Exemplul 2: Numărul de înmatriculare

Folosim un pattern case ca să lucrăm doar cu potrivirile care nu sunt null.

void main() {
  final numar = RegExp(r'^([A-Z]{1,2})\s?(\d{2,3})\s?([A-Z]{3})$');
  for (var text in ['IS 12 ABC', 'B123XYZ', 'CJ-07-DEF']) {
    if (numar.firstMatch(text) case final m?) {
      print('$text: județ ${m[1]}, număr ${m[2]}, litere ${m[3]}');
    } else {
      print('$text: format necunoscut');
    }
  }
}

Rezultat

IS 12 ABC: județ IS, număr 12, litere ABC
B123XYZ: județ B, număr 123, litere XYZ
CJ-07-DEF: format necunoscut

Greșeli frecvente

  • Folosești m[1] ca String direct: grupurile sunt String?. Adaugă ! când știi sigur că grupul există sau ?? ''.

Comenzi înrudite

  • RegExpMatch: Rezultatul unei căutări cu RegExp: textul găsit, grupurile din paranteze și pozițiile de început și sfârșit.
  • RegExp.allMatches: Returnează toate potrivirile modelului în text, ca o colecție de obiecte RegExpMatch.
  • RegExp.hasMatch: hasMatch spune dacă modelul apare în text; stringMatch returnează textul primei potriviri sau null.
  • RegExpMatch.namedGroup: Returnează textul prins de un grup cu nume, scris în model ca (?<nume>…).