31/05/2015 15

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
Regex ile yapılmak istenen
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...

Şimdi bununla ilgili bir örnek yapalım...

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...

Şimdi bununla ilgili bir örnek yapalım...  

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...
Tags

Share this Post



Post a Comment

Success! Your comment sent to post. It will be showed after confirmation.
Error! There was an error sending your comment.

Comments

    There is no comment. Be the owner of first comment...