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 sebagaiRegExpMatch
.hasMatch(String input)
: Mengembalikantrue
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
, atauc
).[^abc]
: Mencocokkan sembarang karakter kecuali yang ada dalam tanda kurung.[a-z]
: Mencocokkan rentang karakter (contoh: semua huruf kecil daria
hinggaz
).\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 tepatn
kali pengulangan dari karakter sebelumnya.{n,}
: Mencocokkann
atau lebih pengulangan dari karakter sebelumnya.{n,m}
: Mencocokkan antaran
danm
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.