0Pricing
Java Academy · Pelajaran

Ekspresi Reguler dengan Pattern dan Matcher

Validasi email, ekstrak substring, dan ganti pola menggunakan regex Java.

Ekspresi Reguler dengan Pattern dan Matcher adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Ekspresi Reguler dengan Pattern dan Matcher

Paket java.util.regex milik Java menyediakan Pattern dan Matcher untuk pencocokan, validasi, ekstraksi, dan penggantian teks yang andal.

Mengapa Menggunakan Ekspresi Reguler?

Ekspresi reguler (regex) adalah pola untuk mencocokkan teks. Di Java, ekspresi reguler digunakan untuk memvalidasi email, nomor telepon, mengekstrak data dari logging, dan mengurai teks terstruktur.

import java.util.regex.*;

// Is this a valid email?
String email = "alice@example.com";
boolean valid = email.matches("[a-zA-Z0-9._%+\\-]+@[a-zA-Z0-9.\\-]+\\.[a-zA-Z]{2,}");
System.out.println(valid); // true

// Extract version numbers from a string
String log = "App v1.2.3 deployed; api v2.0.0 started";
Pattern p = Pattern.compile("v(\\d+\\.\\d+\\.\\d+)");
Matcher m = p.matcher(log);
while (m.find()) System.out.println(m.group(1));
// 1.2.3 
// 2.0.0

Dasar-Dasar Sintaks Regex

Metakarakter regex penting:

  • .—karakter apa pun
  • \d—digit; \w—karakter kata; \s—spasi kosong
  • *—0 atau lebih; +—1 atau lebih; ?—0 atau 1
  • {n,m}—antara n dan m kali
  • ^/$—awal/akhir baris
  • [abc]—kelas karakter
// In Java strings, backslash must be doubled: \d = "\\d"
Pattern digit   = Pattern.compile("\\d+");      // one or more digits
Pattern word    = Pattern.compile("\\w{3,20}");  // 3-20 word chars
Pattern space   = Pattern.compile("\\s+");       // whitespace
Pattern phone   = Pattern.compile("\\d{3}-\\d{3}-\\d{4}"); // 555-867-5309

System.out.println(digit.matcher("42").matches());       // true
System.out.println(phone.matcher("555-867-5309").matches()); // true

Pattern.compile dan Matcher

Kompilasi pola sekali, lalu gunakan kembali Matcher untuk beberapa input—lebih efisien daripada menggunakan String.matches() untuk validasi berulang.

import java.util.regex.*;

Pattern emailPattern = Pattern.compile(
    "^[a-zA-Z0-9._%+\\-]+@[a-zA-Z0-9.\\-]+\\.[a-zA-Z]{2,6}$"
);

String[] emails = {"alice@example.com", "bad@", "test.user@co.uk", "no-at-sign"};
for (String e : emails) {
    Matcher m = emailPattern.matcher(e);
    System.out.println(e + " -> " + (m.matches() ? "valid" : "invalid"));
}

find() vs matches()

matches() menguji seluruh String. find() menemukan kemunculan berikutnya di dalam String. Gunakan find untuk pencarian dan matches untuk validasi menyeluruh.

import java.util.regex.*;

Pattern price = Pattern.compile("\\d+\\.\\d{2}");

String invoice = "Total: 129.99, Tax: 10.40, Shipping: 5.00";
Matcher m = invoice.matcher(invoice);

// find() locates all matches
while (m.find()) {
    System.out.println("Found: " + m.group() + " at " + m.start());
}
// Found: 129.99 at 7
// Found: 10.40 at 20
// Found: 5.00 at 34

Grup Penangkap

Tanda kurung membuat grup penangkap. Gunakan group(n) untuk mengekstrak substring yang cocok.

import java.util.regex.*;

Pattern date = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher m = date.matcher("Deployed on 2024-06-15 and 2024-07-01");

while (m.find()) {
    String year  = m.group(1);
    String month = m.group(2);
    String day   = m.group(3);
    System.out.println(year + "/" + month + "/" + day);
}
// 2024/06/15
// 2024/07/01

Grup Bernama

Grup bernama (?<name>...) membuat grup penangkap lebih mudah dibaca dan diakses berdasarkan nama.

import java.util.regex.*;

Pattern log = Pattern.compile(
    "(?<timestamp>\\d{4}-\\d{2}-\\d{2}) (?<level>[A-Z]+) (?<message>.+)"
);

String line = "2024-06-15 ERROR Database connection failed";
Matcher m = log.matcher(line);

if (m.matches()) {
    System.out.println("Time: "    + m.group("timestamp"));
    System.out.println("Level: "   + m.group("level"));
    System.out.println("Message: " + m.group("message"));
}
// Time: 2024-06-15
// Level: ERROR
// Message: Database connection failed

replaceAll dan replaceFirst

Penggantian berbasis pola: ganti semua kemunculan atau hanya kemunculan pertama.

import java.util.regex.*;

String text = "Call us at 123-456-7890 or 098-765-4321";

// Mask phone numbers for privacy logs
String masked = text.replaceAll("\\d{3}-\\d{3}-\\d{4}", "XXX-XXX-XXXX");
System.out.println(masked);
// Call us at XXX-XXX-XXXX or XXX-XXX-XXXX

// Replace multiple whitespace with single space
String cleaned = "too   many   spaces".replaceAll("\\s+", " ");
System.out.println(cleaned); // too many spaces

split() dengan Regex

String.split() menerima regex. Gunakan metode ini untuk memisahkan teks berdasarkan beberapa pembatas atau pemisah yang rumit.

// Split on comma with optional spaces
String csv = "Alice, Bob,  Charlie,Diana";
String[] names = csv.split("\\s*,\\s*");
for (String name : names) System.out.println("'" + name + "'");
// 'Alice' 'Bob' 'Charlie' 'Diana'

// Split on any whitespace
String words = "one  two\tthree  four";
String[] parts = words.split("\\s+");
System.out.println(parts.length); // 4

// Limit splits
String line = "key=value=extra";
String[] kv = line.split("=", 2); // [key, value=extra]

Flag Pattern

Flag mengubah perilaku regex: CASE_INSENSITIVE, MULTILINE, DOTALL.

import java.util.regex.*;

// Case-insensitive match
Pattern p = Pattern.compile("hello", Pattern.CASE_INSENSITIVE);
System.out.println(p.matcher("HELLO World").find()); // true

// MULTILINE: ^ and $ match line boundaries
Pattern multi = Pattern.compile("^ERROR", Pattern.MULTILINE);
String logs = "INFO start\nERROR crash\nINFO end";
Matcher m = multi.matcher(logs);
int count = 0;
while (m.find()) count++;
System.out.println("ERROR lines: " + count); // 1

Praktik: Pengurai Logging

Mengurai baris access log bergaya Apache dengan grup bernama.

import java.util.regex.*;

Pattern accessLog = Pattern.compile(
    "(?<ip>[\\d.]+) - - \\[(?<time>[^\\]]+)\\] " +
    "\"(?<method>[A-Z]+) (?<path>[^ ]+)[^\"]*\" " +
    "(?<status>\\d{3}) (?<bytes>\\d+)"
);

String line = "192.168.1.1 - - [27/May/2024:10:30:00 +0000] \"GET /api/products HTTP/1.1\" 200 1024";
Matcher m = accessLog.matcher(line);
if (m.matches()) {
    System.out.println("IP: "     + m.group("ip"));
    System.out.println("Method: " + m.group("method"));
    System.out.println("Status: " + m.group("status"));
}

Pemeriksaan Singkat

Apa perbedaan antara matches() dan find() dalam Matcher?

Rangkuman: Ekspresi Reguler dengan Pattern dan Matcher

Hal-hal penting:

  • Pattern.compile() mengompilasi regex; Matcher mengujinya terhadap String
  • matches() memvalidasi seluruh String; find() mencari kemunculan
  • Grup penangkap () mengekstrak substring; akses dengan group(n) atau group("name")
  • Grup bernama (?...) membuat pola lebih mudah dibaca
  • replaceAll() dan split() menerima pola regex untuk manipulasi teks yang fleksibel
  • Gunakan flag Pattern.CASE_INSENSITIVE, MULTILINE, DOTALL untuk mengubah perilaku pencocokan

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Ekspresi Reguler dengan Pattern dan Matcher” gratis?

Ya — teks lengkap “Ekspresi Reguler dengan Pattern dan Matcher” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Ekspresi Reguler dengan Pattern dan Matcher”?

Validasi email, ekstrak substring, dan ganti pola menggunakan regex Java. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Ekspresi Reguler dengan Pattern dan Matcher” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Imutabilitas String dan String Pool
  2. StringBuilder untuk Penggabungan Efisien
  3. Blok Teks dan String.format
  4. Ekspresi Reguler dengan Pattern dan Matcher
← Kembali ke Java Academy