Java ile Regex Kullanımı
Birçok string ifadenin bazı string ifadelerle eşleşmesi gerekmektedir. Fakat bunları tek tek tanımlaka çok karmaşık bir iştir. Bunun kolay yolu olan java.util.regex sınıfını kullanırız.Bu Java nın bize sağladığı kolaylıklardan biridir.
Regex ile düzenli string ifadeler sağlayabiliriz. güzelliğine rağmen yavaş bir işleyişi vardır. Hız için ilk başta Pattern olayını yapıp sonra Compile ederiz ve ardından Match ederiz.
Pattern : Düzen
Compile : Derleme
Match : Eşleştirme
Aşağıda bir Pattern.matches örneği vardır . Pattern.matches bir döngü ile birlikte çağırdığımızdadizi içerisinde 'd' ile başlayan terimleri çağırmış oluyoruz....Ayrıca bununla eşleştirmede yapmış oluyoruz. Gördüğünüz gibi birinci terimleri 'd' harfi ile eşleştirme yaptık...
Not : Bu programın çıktı sonuçları bizlere Boolean olarak dönecektir. Yani eşleşme varsa true; yoksa false olarak dönecektir.
import java.util.regex.Pattern;
public class Program {
public static void main(String[] args) {
// Denemek istediğimiz terimler
String[] dizi= { "dag", "deniz", "cam", "Kod" };
// Regex ile kontrol ettiğimiz alan
for (String input : dizi) {
boolean cikti = Pattern.matches("d.+", dizi);
System.out.println(cikti);
}
}
}
Program çıktısı
true
true
false
true
d harfi bir karakterdi...
.+ işaretinden sonra gelen yerden önce olacak olan alanı belli etmiş olduk...
Pattern.compile ve Matcher nesneleri : Şimdi ise Regex işlemlerinin daha hızlı halini öğreneceğiz. Şimdi Düzenli bir string oluşturmak için Pattern.compile kullanacağız.
Şimdi matcher() fonksiyonunu çağıracaz ve oda bize Matcher sınıfının içeriğini döndürecek. Eşleşmeleri kontrol edecek ve eğer eşleşme varsa bize true döndürecek. Burdan anlaşılıyor ki matcher fonksiyonuda bizlere Boolean değişken döndürüyor...
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Program {
public static void main(String[] args) {
// Verilen formatı derleme alanı. Yani buraya göre kontrol yapılacak
Pattern eslesme = Pattern.compile("sayidd");
// şimdi eşleşmeyi kontrol etmesi için Matcher hazırladık
Matcher kontrol = eslesme.matcher("sayi12");
if (kontrol.matches()) {
System.out.println(true);
}
// ve eşleşme varsa veya yoksa sonuc olan boolean değişkenimizi döndürdük.
kontrol = eslesme.matcher("say456");
if (kontrol.matches()) {
System.out.println(true);
}
}
}
Programın Çıktısı
true
false
Eşleştirme ayarlarımız :
sayi : Eşleşme ifadesi sayi ile başlamalı dedik
dd iki tane daha karakter gelecek dedik
Bu şekilde birincisi true ikincisi false döndü...
Gruplama İşlemleri :
Regex düzenleri genellikle gruplanmış string ifadeleri içerir. Bir sonraki örnekte grupların sıralamasına göre işlem yapacağız. Yani onları 1. grup 2. grup ... diye çağıracağız...
İlk başta pattern ile gruplamaları oluşturacağız ve ardından o gruplamalara göre ifadeleri bölüp çağıracağız ve gruplama düzenine görede yazdıracağız...
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Program {
public static void main(String[] args) {
//Burda gruplama şeklinin düzenini oluşturmuş olduk
Pattern fonksiyon= Pattern.compile("(d+)-(d+)");
// burdada eşleştirmek istediğimiz string ifadeyi girdik.
Matcher eslesme = fonksiyon.matcher("9876-1011");
// eğer eşleşme sağlanıyorsa onları gruplanmış şekilde döndürüyoruz
if (eslesme .matches()) {
String ilk = eslesme.group(1);
String ikinci = eslesme .group(2);
System.out.println(ilk);
System.out.println(ikinci);
}
}
}
Program Çıktısı :
9876
1011
Düzen Mantığı :
(d+) gruptaki sonraki karakteri gösterir
- Tire işareti
İsimlendirilmiş Gruplar : İsimlendirmelerle gruplamalarda kolayca string düzenlerini çekip kullanabiliriz..Gruplaı isimlendirmek için "< >" taglarını kullanırız. Sonra isimlendirdiğimiz ifadeleri group() fonksiyonu ile çağırırız...
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Program {
public static void main(String[] args) {
// İsimlendirilmiş şekilde bir Regex düzeni tanımladık
Pattern duzen = Pattern.compile("(?...)-(?...)");
Matcher m = duzen.matcher("The-Kod");
// Eşleşme varmı yokmu diye kontrol ettik ve isimlerle çağırdık...
if (m.matches()) {
String ilk = m.group("sol");
String ikinci = m.group("sag");
System.out.println(ilk);
System.out.println(ikinci);
}
}
}
Program Çıktısı
The
Kod
Aradığımız Düzen ise :
(?...) sol isimli ve 3 karakterden oluşan
- aradaki ayraç karakter
(?...) ve sağ isimli 3 karakterden oluşan yapı
Bu makalemizinde sonuna geldik...
Herkese iyi çalışmalar diliyorum...
Comments