Veri

Greedy , Reluctant ve Possessive

Matcher sınıfı normal durumlarda arama işlemine en sondan başlar. Önce son karakteri alır ve karşılaştırmayı yapar. Eğer uyum olmaz ise bir önceki ile son karakteri birleştirir ve tekrar uyum arar. Uyum bulunana kadar devam edilir. Bu yöntem greedy yöntemidir. Diğer bir yöntem reluctant'dır ve solda ilk karakteri, sonra ilk iki karakteri vb.. uyum bulana kadar devam eder. Uyum bulunursa bulunduğu noktadan sonrasını aynı şekilde aramaya devam eder. Üçüncü yöntem ise possessive yöntemdir. Burada metni bütün olarak alınır ve uyulur ise bulur uymaz ise bulunmaz ve arama sonra erer.

Örneğin xfooxxxxxxfoo ifadesi için foo ile biten herhangi bir ifade arayalım. Bunun için .*foo şeklinde bir regular expression yazabiliriz. . (nokta) işareti herhangi bir karakter anlamındadır. * ise 0 veya istenildiği kadar anlamını verir.

Yukarıdaki arama greedy yöntemi ile yapılır. Önce tüm ifade alınır ve uyuluyor mu diye bakılır. Uyulmuyor ise sondan bir karakter atılır ve tekrar bakılır. Aşağıdaki gibi çalışacaktır :
OkunanKalanSonuç
xfooxxxxxxfoouymuyor
xfooxxxxxxfoouymuyor
xfooxxxxxxfoouymuyor
xfooxxxxxxfoouyuyor
İkinci yöntem reluctant ile yapılırsa
OkunanKalanSonuç
xfooxxxxxxfooUymuyor
xfooxxxxxxfooUymuyor
xfooxxxxxxfooUymuyor
xfooxxxxxxfooUydu
xxxxxxfooUymuyor
xxxxxxfooUymuyor
7xxxxxxfooUymuyor
xxxxxxfooUymuyor
xxxxxxfooUymuyor
xxxxxxfooUymuyor
xxxxxxfooUymuyor
xxxxxxfooUymuyor
xxxxxxfooUydu
Possessive ise bir bütün olarak alır ve karşılaştırır. xfooxxxxxxfoo ifadesi .foo pattern'ine uymamaktadır. (foo önünde harhangi bir karakterin olması gerekirken birden fazla karakter vardır). Aşağıda yukarıdaki sonucu test edebileceğiniz bir örnek görülmektedir :
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class RegexQuantifierTest {
             
	public static void main(String[] args) {
			   
		String text="xfooxxxxxxfoo";
	   
		Pattern pattern= Pattern.compile(".*foo");
		//Pattern pattern= Pattern.compile(".*?foo");
		//Pattern pattern= Pattern.compile(".*+foo");
		Matcher m = pattern.matcher(text);
	   
		while(m.find()){
					 
			System.out.println(m.group());
					 
		}
			   
	}
 
}
zafer.teker , 26.01.2017

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir