unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Regex

Regex #

Regular Expressions (Regex) adalah pola yang digunakan untuk mencocokkan karakter dalam string. Regex adalah alat yang sangat kuat untuk melakukan pencarian dan manipulasi teks. Dalam Dart, Anda bisa menggunakan regex untuk mencocokkan, mengekstrak, dan mengganti teks berdasarkan pola tertentu. Dart menyediakan dukungan untuk regex melalui kelas RegExp.

Dasar-dasar Regex dalam Dart #

Regex dalam Dart diwakili oleh kelas RegExp. Anda bisa membuat objek RegExp dan menggunakannya untuk berbagai operasi seperti pencarian, pencocokan, dan penggantian.

Membuat Objek RegExp #

Untuk membuat regex, Anda bisa menggunakan konstruktor RegExp dan memberikan pola (pattern) yang ingin Anda gunakan.

Contoh:

void main() {
  RegExp regExp = RegExp(r'\d+'); // Pola untuk mencocokkan satu atau lebih digit
}

Dalam contoh di atas, pola \d+ digunakan untuk mencocokkan satu atau lebih digit. r sebelum string menunjukkan bahwa ini adalah raw string yang berarti karakter escape seperti \ tidak akan diinterpretasikan oleh Dart dan akan langsung diteruskan ke regex.

Metode RegExp yang Umum Digunakan #

Setelah membuat objek RegExp, Anda bisa menggunakan berbagai metode untuk bekerja dengan teks:

  • hasMatch(String input): Mengecek apakah ada kecocokan dengan input.
  • stringMatch(String input): Mengembalikan kecocokan pertama yang ditemukan.
  • allMatches(String input): Mengembalikan semua kecocokan yang ditemukan dalam bentuk iterable.
  • firstMatch(String input): Mengembalikan kecocokan pertama sebagai RegExpMatch.
  • hasMatch(String input): Mengembalikan true jika pola ditemukan dalam string.
  • replaceAll(String input, String replacement): Mengganti semua kecocokan dalam input dengan string pengganti.

Contoh:

void main() {
  RegExp regExp = RegExp(r'\d+');
  String text = 'Ada 123 apel dan 456 jeruk';

  // Mengecek kecocokan
  bool hasDigits = regExp.hasMatch(text);
  print('Mengandung digit? $hasDigits'); // Output: Mengandung digit? true

  // Mendapatkan kecocokan pertama
  String? firstMatch = regExp.stringMatch(text);
  print('Kecocokan pertama: $firstMatch'); // Output: Kecocokan pertama: 123

  // Mendapatkan semua kecocokan
  Iterable<RegExpMatch> matches = regExp.allMatches(text);
  for (var match in matches) {
    print('Kecocokan: ${match.group(0)}'); // Output: Kecocokan: 123, Kecocokan: 456
  }

  // Mengganti kecocokan
  String replacedText = text.replaceAll(regExp, '#');
  print(replacedText); // Output: Ada # apel dan # jeruk
}

Pola Regex (Regular Expression Patterns) #

Pola dalam regex terdiri dari kombinasi simbol dan karakter khusus yang menentukan apa yang harus dicocokkan dalam teks. Berikut adalah beberapa pola dasar yang sering digunakan dalam regex.

Karakter Dasar #

  • .: Mencocokkan sembarang karakter kecuali newline.
  • [abc]: Mencocokkan salah satu karakter dalam tanda kurung (contoh: a, b, atau c).
  • [^abc]: Mencocokkan sembarang karakter kecuali yang ada dalam tanda kurung.
  • [a-z]: Mencocokkan rentang karakter (contoh: semua huruf kecil dari a hingga z).
  • \d: Mencocokkan digit (sama dengan [0-9]).
  • \D: Mencocokkan karakter non-digit.
  • \w: Mencocokkan karakter alfanumerik (huruf atau angka) atau underscore (sama dengan [a-zA-Z0-9_]).
  • \W: Mencocokkan karakter non-alfanumerik.
  • \s: Mencocokkan spasi putih (space, tab, newline).
  • \S: Mencocokkan karakter non-spasi putih.

Anchors (Penanda Posisi) #

  • ^: Mencocokkan awal baris.
  • $: Mencocokkan akhir baris.
  • \b: Mencocokkan batas kata (word boundary).
  • \B: Mencocokkan non-batas kata.

Quantifiers (Pengulangan) #

  • *: Mencocokkan 0 atau lebih pengulangan dari karakter sebelumnya.
  • +: Mencocokkan 1 atau lebih pengulangan dari karakter sebelumnya.
  • ?: Mencocokkan 0 atau 1 pengulangan dari karakter sebelumnya.
  • {n}: Mencocokkan tepat n kali pengulangan dari karakter sebelumnya.
  • {n,}: Mencocokkan n atau lebih pengulangan dari karakter sebelumnya.
  • {n,m}: Mencocokkan antara n dan m pengulangan dari karakter sebelumnya.

Contoh Penggunaan Quantifiers:

void main() {
  RegExp regExp = RegExp(r'\d{3,}');
  String text = 'Nomor telepon: 123456789';

  // Mencocokkan semua digit yang terdiri dari 3 digit atau lebih
  Iterable<RegExpMatch> matches = regExp.allMatches(text);
  for (var match in matches) {
    print('Kecocokan: ${match.group(0)}'); // Output: Kecocokan: 123456789
  }
}

Groups (Kelompok) dan Alternation #

  • (): Digunakan untuk membuat grup, yang memungkinkan Anda menangkap bagian dari teks yang cocok.
  • |: Alternation, atau logika “OR”. Mencocokkan salah satu dari pola yang dipisahkan oleh |.

Contoh Penggunaan Groups dan Alternation:

void main() {
  RegExp regExp = RegExp(r'(apel|jeruk)\s\w+');
  String text = 'Saya makan apel merah dan jeruk manis';

  // Mencocokkan pola "apel" atau "jeruk" diikuti oleh kata
  Iterable<RegExpMatch> matches = regExp.allMatches(text);
  for (var match in matches) {
    print('Kecocokan: ${match.group(0)}'); // Output: Kecocokan: apel merah, Kecocokan: jeruk manis
  }
}

Daftar Identifier Regex dalam Dart #

Berikut adalah daftar lengkap dari identifier regex yang sering digunakan dalam Dart:

Identifier Deskripsi
. Mencocokkan sembarang karakter kecuali newline
\d Mencocokkan digit (angka 0-9)
\D Mencocokkan karakter non-digit
\w Mencocokkan karakter alfanumerik atau underscore
\W Mencocokkan karakter non-alfanumerik
\s Mencocokkan spasi putih (space, tab, newline)
\S Mencocokkan karakter non-spasi putih
^ Mencocokkan awal baris
$ Mencocokkan akhir baris
\b Mencocokkan batas kata
\B Mencocokkan non-batas kata
* Mencocokkan 0 atau lebih pengulangan dari karakter sebelumnya
+ Mencocokkan 1 atau lebih pengulangan dari karakter sebelumnya
? Mencocokkan 0 atau 1 pengulangan dari karakter sebelumnya
{n} Mencocokkan tepat n kali pengulangan dari karakter sebelumnya
{n,} Mencocokkan n atau lebih pengulangan dari karakter sebelumnya
{n,m} Mencocokkan antara n dan m pengulangan dari karakter sebelumnya
() Menangkap dan membuat grup dari teks yang cocok
` `
[] Karakter set, mencocokkan salah satu karakter di dalam tanda kurung
[^]

| Karakter set negatif, mencocokkan sembarang karakter kecuali yang di dalam tanda kurung |

Contoh Kasus Penggunaan Regex dalam Dart #

Validasi Alamat Email #

Regex sering digunakan untuk memvalidasi format data. Berikut adalah contoh validasi alamat email.

Contoh:

void main() {
  String emailPattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
  RegExp regExp = RegExp(emailPattern);

  String email = '[email protected]';

  if (regExp.hasMatch(email)) {
    print('Email valid');
  } else {
    print('Email tidak valid');
  }
}

Ekstraksi Nomor Telepon #

Contoh lain adalah mengekstraksi nomor telepon dari teks.

Contoh:

void main() {
  String text = 'Kontak kami di +62-123-456-7890 atau 021-6789-1234';
  RegExp regExp = RegExp(r'\+?\d{1,3}-\d{3,4}-\d{3,4}-\d{4}');

  Iterable<RegExpMatch> matches = regExp.allMatches(text);
  for (var match in matches) {
    print('Nomor telepon: ${match.group(0)}'); // Output: Nomor telepon: +62-123-456-7890, Nomor telepon: 021-6789-1234
  }
}

Mengganti Teks #

Mengganti semua kata “jeruk” dengan “apel” dalam teks.

Contoh:

void main() {
  String text = 'Saya suka jeruk, jeruk sangat segar';
  RegExp regExp = RegExp(r'jeruk');

  String replacedText = text.replaceAll(regExp, 'apel');
  print(replacedText); // Output: Saya suka apel, apel sangat segar
}

Kesimpulan #

Regex dalam Dart adalah alat yang sangat kuat untuk manipulasi string, mulai dari pencarian sederhana hingga validasi data yang kompleks. Dengan menggunakan kelas RegExp, Anda bisa mencocokkan, mengekstrak, dan mengganti teks dengan pola yang fleksibel. Memahami berbagai pola dan identifier dalam regex akan sangat membantu dalam menulis kode yang lebih efisien dan efektif untuk memanipulasi teks. Dart menyediakan dukungan penuh untuk regex, menjadikannya alat yang tak ternilai dalam pengembangan aplikasi berbasis teks.

« Date & Time
Pub.dev »