Pattern ve Matcher ile Düzenli İfadeler
Java düzenli ifadelerini kullanarak e-postaları doğrulayın, alt dizeleri çıkarın ve kalıpları değiştirin.
Pattern ve Matcher ile Düzenli İfadeler, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Pattern ve Eşleştirici ile Düzenli İfadeler
Java'nın java.util.regex paketi, güçlü metin eşleştirme, doğrulama, ayıklama ve değiştirme işlemleri için Pattern ve Eşleştirici sağlar.
Düzenli İfadeler Neden Kullanılır?
Düzenli ifadeler (regex), metni eşleştirmek için kullanılan kalıplardır. Java'da e-postaları ve telefon numaralarını doğrulamak, günlüklerden veri ayıklamak ve yapılandırılmış metni ayrıştırmak için kullanılırlar.
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.0Düzenli İfade Sözdiziminin Temelleri
Temel düzenli ifade üst karakterleri:
.— herhangi bir karakter\d— rakam;\w— sözcük karakteri;\s— boşluk karakteri*— 0 veya daha fazla;+— 1 veya daha fazla;?— 0 veya 1{n,m}— n ile m kez arasında^/$— satırın başlangıcı/sonu[abc]— karakter sınıfı
// 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()); // truePattern.compile ve Eşleştirici
Bir deseni bir kez compile edip Eşleştiriciyi birden fazla input için yeniden kullanın; tekrarlanan doğrulamalarda String.matches() kullanmaktan daha verimlidir.
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() ve matches() Karşılaştırması
matches() String'in tamamını sınar. find() String içinde bir sonraki oluşumu bulur. Arama için find, tam doğrulama için matches kullanın.
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 34Yakalama Grupları
Parantezler yakalama grupları oluşturur. Eşleşen alt String'leri ayıklamak için group(n) kullanın.
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/01Adlandırılmış Gruplar
Adlandırılmış gruplar (?<name>...), yakalama gruplarını daha okunabilir ve ada göre erişilebilir hâle getirir.
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 failedreplaceAll ve replaceFirst
Desene dayalı değiştirme: tüm oluşumları veya yalnızca ilk oluşumu değiştirin.
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 spacesRegex ile split()
String.split() bir regex kabul eder. Birden çok ayraçla veya karmaşık ayırıcılarla bölmek için kullanın.
// 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]Pattern Bayrakları
Bayraklar, regex davranışını değiştirir: büyük/küçük harfe duyarsızlık, MULTILINE ve 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); // 1Uygulamalı: Günlük Ayrıştırıcı
Adlandırılmış gruplarla Apache tarzı erişim günlüğü satırlarını ayrıştırma.
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"));
}Hızlı Kontrol
Matcher içinde matches() ile find() arasındaki fark nedir?
Özet: Pattern ve Eşleştirici ile Düzenli İfadeler
Temel çıkarımlar:
- Pattern.compile() bir regex'i derler; Eşleştirici bunu String'lere karşı sınar
- matches() String'in tamamını doğrular; find() oluşumları arar
- Yakalama grupları () alt String'leri ayıklar; bunlara group(n) veya group("name") ile erişilir
- Adlandırılmış gruplar (?<name>...) kalıpları daha okunabilir kılar
- replaceAll() ve split(), esnek metin işleme için regex kalıplarını kabul eder
- Büyük/küçük harfe duyarsızlık, MULTILINE ve DOTALL bayraklarını kullanarak eşleştirme davranışını değiştirin
Sıkça Sorulan Sorular
“Pattern ve Matcher ile Düzenli İfadeler” dersi ücretsiz mi?
Evet — “Pattern ve Matcher ile Düzenli İfadeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Pattern ve Matcher ile Düzenli İfadeler” dersinde ne öğreneceğim?
Java düzenli ifadelerini kullanarak e-postaları doğrulayın, alt dizeleri çıkarın ve kalıpları değiştirin. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Pattern ve Matcher ile Düzenli İfadeler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- String Değişmezliği ve String Havuzu
- Verimli Birleştirme için StringBuilder
- Metin Blokları ve String.format
- Pattern ve Matcher ile Düzenli İfadeler