30/07/2015 11

Java İle RegEx işlemleri Regular Expressions

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 :

Javada Regex fonksiyonları string ifadeleri almak için gruplama işlemlerinide kullanabilir. Burda konumsal değerler kullanılır.Yani ifadelerin karakterlerine göre bir çağırma işlemi yapılır. Aşağıdaki örnekte ilk olarak bir Regex metni tamamlayalım ve ardında onu eşleşme ile çağıralım. Daha sonra onları regex ile çağıralım...

 

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

public class Program {
    public static void main(String[] args) {

	Pattern p= Pattern.compile("(d+)-(d+)"); // Kullanacağımız Regex düzenini oluşturduk

	// String ifade üzerindeki eşleşmeyi bulduk
	Matcher m = p.matcher("1234-5678");

	// Ve eğer eşleşme varsa ekranda göster dedik
	if (m.matches()) {
	    String ilk = m.group(1);
	    String ikinci = m.group(2);

	    System.out.println(ilk);
	    System.out.println(ikinci);
	}
    }
}
 

Program Çıktısı

1234
5678

Düzen - Expression

(d+) Bir grupta fazladan bir karakter - Birtane eksik karakter İsimlendirilen Gruplar: İsimlerle string ifadeleri çok kolay bir şekilde gruplandırabiliriz. İsimlendirilen grupları köşeli parantez ile ayarlayabiliriz. Ondan sonra onu isimlerle çağırabiliriz. Ş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) {

	// İsimlendirilen gruplar
	Pattern p = Pattern.compile("(?..)x(?..)");
	Matcher m = p.matcher("ThexKod");

	// Eşleşmeleri kontrol et
	// ... sonrada onları isimleriyle çağırabilirsiniz
	if (m.matches()) {
	    String ilk = m.group("birinci");
	    String iki = m.group("ikinci");

	    System.out.println(ilk);
	    System.out.println(iki);
	}
    }
}
 


Program Çıktısı
The
Kod

Pattern
(?..) brinci adındaki grubun adı
x aradaki x harfi
(?..) ikinci adındaki grubun adı

Çift Tırnaklı Düzenler: String ifadeler ("TheKodProgram") Şeklinde olacak şekilde algılanır. Java Programdada bu şekilde çalışır...

Burak Hamdi Tufan

İyi Çalışmalar


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