Bu Kategoriye İçerik Girin veya Soru Sorun

Kategori İçi Sözlük

Bu Sayfayı Paylaş:

java.util.regex

Tanım: Regular Expression ile String içinde belirli desene uyan ifadeleri tespit etmek için kullanılan Java paketi

Pattern

Tanım: java.util.regex paketinde bir Regular Expression'ı temsil eden ana sınıf

Matcher

Tanım: java.util.regex paketinde bir String'e Pattern sınıfını uygulayan ve uyan String ifadelerini almanızı sağlayan sınıf

MatchResult

Tanım: java.util.regex, bir String'e Matcher sınıfı ile uygulanan Pattern sonucu dönen ifadeleri temsil eden interface

Quantifier

Tanım: Bir Pattern'de bir ifadenin kullanım sıklığı ve adeti ile ilgili kullanılan ifadeler. İfadeler şu şekildedir: X? bir kere veya hiç, X* hiç , bir veya daha fazla , X+ en az bir veya daha fazla, X{n} kere tekrarlı , X{n,} en az n kere tekrarlı, X{n,m} en az m en fazla m kere tekrarlı. Aynı işlevi arama mantığını ve yöntemini değiştiren greedy, reluctant, ve possessive adında üç türü vardır ve bazı durumlarda farklılık gösterebilir.

Regular Expression İfadeleri

Regular Expression oluşturmada kullanılan ifadeler aşağıdaki gibidir table:/ İfade Açıklama \ \ ile başlayanlar bir karakteri veya ön tanımlı bir ifadeyi belirtmek için kullanılır. . Herhangi bir karakter [] İçerisindeki birbirine birleşik yapılar için gruplandırmak için kullanılır. [^abc] : a veya b veya c - İki karakter aralığındakiler anlamına gelir. [a-zA-Z] : a ile z ve A ile Z araı, [a-d[m-p]] : a ile d arası veya m ile p arası ^ değil anlamına gelen ifade. [^abc] : a, b veya c dışındaki diğer karakterler && kesisim için kullanılır. [a-z&&[def]] : d , e veya f. a-z ile [def] nin kesişimidir. [a-z&&[^bc]] : b ve c hariç, a ile z arası. [a-z&&[^m-p]] : m ile p arasındakiler hariç a ile z arası \\ backslach (ters slach) \0mnn sekizli (oktal) değerin karakter karşılığı) \xhh veya \uhhhh (onaltılı (hezedecimal ) bir değerin karakter karşılığı ) \t tab \n yeni satır \r satır başı \f form besleme karakteri \a uyarı karakteri \e escape karakteri \cx x karakterine karşılık gelen kontrol karakteri \d bir rakam 0 ile 9 \D rakam hariç karakter \h yatay whitespace karakter \H yatay whitespace karakter dışındaki karakter \v düşey whitespace karakter \V düşey whatespace karakter dışındakiler \s whitespace karakter (yeni satır, tab, satır başı ..) \S whatespace karakter dışında bir karakter \w kelime ayıran karakter (word karakter) : [a-zA-Z_0-9] \W kelime ayıran karakterlerden harici bir karakter \b kelime \B kelime değil ^ Satır $ Satır sonu \p{Lower} küçük harfli bir karakter: [a-z] \p{Upper} büyük harfli bir karakter: [A-Z] \p{ASCII} Bir ASCII karakteri: [\x00-\x7F] \p{Alpha} alfabetik bir karakter :[\p{Lower}\p{Upper}] \p{Digit} bir ondalık rakam : [0-9] \p{Alnum} bir alfanumerik karakter :[\p{Alpha}\p{Digit}] \p{Punct} noktalama işateti: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ \p{Graph} görünebilir bir karakter : [\p{Alnum}\p{Punct}] \p{Print} print edilebilir karakter : [\p{Graph}\x20] \p{Blank} space veya tab: [ \t] \p{Cntrl} kontrol karakterleri : [\x00-\x1F\x7F] \p{XDigit} hexedacimal için kullanılan karakterlerden biri : [0-9a-fA-F] \p{Space} Whitespace karakter: [ \t\n\x0B\f\r] XY X sonra Y olmalı X|Y X veya Y (X) Gruplandırma X? bir kere veya hiç (greedy yöntemi) X* hiç veya birden daha fazla (greedy yöntemi) X+ en az bir veya daha fazla (greedy yöntemi) X{n} n kere tekrarlı olmalıdır (greedy yöntemi) X{n,} en az n kere tekrarlı olmalıdır (greedy yöntemi) X{n,m} en az en en fazla m kere tekrarlı olmalıdır (greedy yöntemi) X?? bir kere veya hiç (reluctant yöntemi) X*? hiç veya birden daha fazla (reluctant yöntemi) X+? en az bir veya daha fazla (reluctant yöntemi) X{n}? n kere tekrarlı olmalıdır (reluctant yöntemi) X{n,}? en az n kere tekrarlı olmalıdır (reluctant yöntemi) X{n,m}? en az en en fazla m kere tekrarlı olmalıdır (reluctant yöntemi) X?+ bir kere veya hiç (reluctant yöntemi) X*+ hiç veya birden daha fazla (possessive yöntemi) X++ en az bir veya daha fazla (possessive yöntemi) X{n}+ n kere tekrarlı olmalıdır (possessive yöntemi) X{n,}+ en az n kere tekrarlı olmalıdır (possessive yöntemi) X{n,m}+ en az en en fazla m kere tekrarlı olmalıdır (possessive yöntemi) \Q \Q ve \E arasındaki karakterler escape eder ve normal karakter gibi işlev görür \E \Q ve \E arasındaki karakterler escape eder ve normal karakter gibi işlev görür table/:

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());
					 
		}
			   
	}
 
}




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