Java - Regular Expressions

Selamat datang, para pemrogram Java yang berbakat! Hari ini, kita akan menyelam ke dunia yang menarik tentang Regular Expressions (Regex) di Java. Jangan khawatir jika anda baru dalam pemrograman; saya akan memandu anda melalui perjalanan ini langkah demi langkah, sama seperti yang saya lakukan untuk ribuan pelajar selama tahun tahun mengajar saya. Jadi, ambil secawan kopi, dan mari kita melangkah ke atas petualangan yang menarik ini bersama-sama!

Java - Regular Expressions

Apa itu Regular Expressions?

Sebelum kita melompat ke implementasi khusus Java, mari kita fahami apa itu Regular Expressions. Bayangkan anda adalah seorang detektif yang mencari pola khusus di atas lautan teks. Itulah yang akan Regex lakukan – ia adalah alat yang kuat untuk pencocokan pola dan manipulasi string.

Kelas Regular Expressions (Regex) di Java

Java menyediakan sebuah paket yang dipanggil java.util.regex yang berisi beberapa kelas untuk bekerja dengan regular expressions. Tiga kelas utama yang akan kita fokuskan adalah:

  1. Pattern
  2. Matcher
  3. PatternSyntaxException

Mari kita eksplor setiap satu dari ini secara detil.

Kelas Pattern

Kelas Pattern mewakili representasi yang dikompilasi dari sebuah regular expression. Pikirkan tentang itu sebagai blueprint untuk kerja detektif pencocokan pola anda.

import java.util.regex.Pattern;

public class PatternExample {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("Hello");
System.out.println("Pattern dibuat: " + pattern);
}
}

Dalam contoh ini, kita membuat pola sederhana yang mencocokkan kata "Hello". Metode compile() mengambil regular expression sebagai string dan mengembalikan objek Pattern.

Kelas Matcher

Kelas Matcher adalah tempat dimana magik yang sebenarnya terjadi. Ia melakukan operasi pencocokan pada urutan karakter berdasarkan Pattern.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class MatcherExample {
public static void main(String[] args) {
String text = "Hello, World! Hello, Java!";
Pattern pattern = Pattern.compile("Hello");
Matcher matcher = pattern.matcher(text);

while (matcher.find()) {
System.out.println("Temukan kecocokan di indeks: " + matcher.start());
}
}
}

Kode ini mencari pola "Hello" di dalam teks yang diberikan dan mencetak indeks awal dari setiap kecocokan. Itu seperti detektif kita menemukan semua kemunculan dari sebuah petunjuk di dalam dokumen!

Sintaks Regular Expression

Sekarang, mari kita pelajari beberapa sintaks dasar untuk membuat pola yang lebih kompleks. Berikut adalah tabel dari karakter meta yang umum digunakan:

Karakter Meta Deskripsi
. Mencocokkan karakter tunggal apapun
^ Mencocokkan awal baris
$ Mencocokkan akhir baris
* Mencocokkan nol atau lebih kemunculan
+ Mencocokkan satu atau lebih kemunculan
? Mencocokkan nol atau satu kemunculan
\d Mencocokkan digit
\s Mencocokkan karakter whitespace
\w Mencocokkan karakter kata (huruf, digit, atau garis bawah)

Mari kita lihat beberapa dari ini dalam aksi:

public class RegexSyntaxExample {
public static void main(String[] args) {
String text = "The quick brown fox jumps over the lazy dog";

// Mencocokkan kata yang dimulai dengan 'q'
Pattern pattern1 = Pattern.compile("\\bq\\w+");
Matcher matcher1 = pattern1.matcher(text);
if (matcher1.find()) {
System.out.println("Kata yang dimulai dengan 'q': " + matcher1.group());
}

// Mencocokkan kata yang diakhiri dengan 'g'
Pattern pattern2 = Pattern.compile("\\w+g\\b");
Matcher matcher2 = pattern2.matcher(text);
if (matcher2.find()) {
System.out.println("Kata yang diakhiri dengan 'g': " + matcher2.group());
}
}
}

Dalam contoh ini, kita menggunakan \b untuk mencocokkan batas kata, \w+ untuk mencocokkan satu atau lebih karakter kata, dan menggabungkan mereka dengan 'q' dan 'g' untuk menemukan kata yang dimulai dan diakhiri dengan 'q' dan 'g' masing-masing.

Grup Penangkapan dalam Regular Expression

Grup penangkapan memungkinkan anda untuk memperlakukan beberapa karakter sebagai satu unit. Mereka dibuat dengan meletakkan karakter yang akan dikelompokkan di dalam tanda kurung.

public class CapturingGroupExample {
public static void main(String[] args) {
String text = "John Doe ([email protected])";
Pattern pattern = Pattern.compile("(\\w+)\\s(\\w+)\\s\\((\\w+@\\w+\\.\\w+)\\)");
Matcher matcher = pattern.matcher(text);

if (matcher.find()) {
System.out.println("Nama Depan: " + matcher.group(1));
System.out.println("Nama Belakang: " + matcher.group(2));
System.out.println("Email: " + matcher.group(3));
}
}
}

Dalam contoh ini, kita menguraikan nama depan, nama belakang, dan alamat email dari seorang orang dari sebuah string. Tanda kurung di dalam pola membuat grup penangkapan, yang dapat kita akses menggunakan matcher.group(n).

Regular Expression - Metode Kelas Matcher

Kelas Matcher menyediakan beberapa metode yang berguna. Berikut adalah beberapa yang paling umum digunakan:

Metode Deskripsi
find() Mencari kecocokan berikutnya untuk pola
group() Mengembalikan potongan string yang cocok
start() Mengembalikan indeks awal dari kecocokan
end() Mengembalikan indeks akhir dari kecocokan
matches() Memeriksa apakah seluruh string cocok dengan pola

Mari kita lihat metode ini dalam aksi:

public class MatcherMethodsExample {
public static void main(String[] args) {
String text = "The rain in Spain falls mainly on the plain";
Pattern pattern = Pattern.compile("\\b\\w+ain\\b");
Matcher matcher = pattern.matcher(text);

while (matcher.find()) {
System.out.println("Ditemukan: " + matcher.group());
System.out.println("Indeks awal: " + matcher.start());
System.out.println("Indeks akhir: " + matcher.end());
}
}
}

Kode ini mencari semua kata yang diakhiri dengan "ain" dan mencetak setiap kecocokan beserta indeks awal dan akhirnya.

Regular Expression - Metode Penggantian

Regular expressions tidak hanya untuk mencari pola; mereka juga bagus untuk mengganti teks. Kelas Matcher menyediakan metode untuk tujuan ini:

public class ReplacementExample {
public static void main(String[] args) {
String text = "The quick brown fox jumps over the lazy dog";
Pattern pattern = Pattern.compile("fox|dog");
Matcher matcher = pattern.matcher(text);

String result = matcher.replaceAll("animal");
System.out.println("Setelah penggantian: " + result);
}
}

Dalam contoh ini, kita mengganti kedua "fox" dan "dog" dengan "animal". Metode replaceAll() melakukan semua pekerjaan yang susah untuk kita!

Regular Expression - Kelas PatternSyntaxException

Kadang-kadang, kita mungkin membuat kesalahan saat menulis regular expressions kami. Itulah dimana kelas PatternSyntaxException menjadi berguna. Ia dilempar untuk menunjukkan kesalahan sintaks dalam pola regular expression.

public class PatternSyntaxExceptionExample {
public static void main(String[] args) {
try {
Pattern.compile("[");  // Regex tidak valid
} catch (PatternSyntaxException e) {
System.out.println("Pengecualian sintaks pola: " + e.getMessage());
System.out.println("Indeks kesalahan: " + e.getIndex());
}
}
}

Kode ini dengan sengaja menggunakan regex yang tidak valid untuk mendemonstrasikan bagaimana PatternSyntaxException bekerja. Itu seperti memiliki penyunting terusan untuk regular expressions anda!

Dan itu semua, folks! Kita telah melakukan perjalanan melalui wilayah Java Regular Expressions, dari pola dasar hingga penggantian kompleks. Ingat, seperti setiap alat yang kuat, regex menjadi lebih berguna jika anda latihan lebih banyak dengan itu. Jadi, jangan takut untuk bereksperimen dan membuat pola anda sendiri. Siapa tahu? Anda mungkin menjadi Sherlock Holmes dari pencocokan pola!

Selamat coding, dan semoga string anda selalu mencocokkan ekspektasi anda!

Credits: Image by storyset