Java Dersleri 16)Regular Expressions[ÇEVİRİ]

WinnerMan

Uzman üye
31 Mar 2012
1,324
0
Eskişehir
Pek zamanım yok bu aralar o yüzden çeviriler de yavaşladı.Bugün anca bunu çevirebildim.Bunda sonra sırada metotlar var.Biraz uzunca bir çeviri olacak o_O çeviriyle birlikte program yapmaya da başlayacağız inşallah.


java.util.regex paketi regular expressions ile şablon eşleştirmeyi sağlar.Java regular expressons Perl pogramlama ile çok benzerdir ve öğrenmesi de aynı şekilde kolaydır.

Bir regular expression stringlerin veya string setlerinin dizisinin karşlışatırılması için kullanılır.

java.util.regex paketi aşağıdaki sınıfları barındırır:
-Şablon Sınıfları:Şablon nesnesi ,regular expression'un temsilinin derlenmiş halidir.Şablon sınıfı public yapıcı desteklemez.Şablon yaratmak için, public static compile() metodunun ilk çalıştırılması gerekir.Bu metotlar, regular expression'un ilk argümanı olarak alınır.

-Eşleştirici Sınıflar:Eşleyici nesne, girdi olarak alınan bir stringe karşı şablonu yorumlayan ve eşleşme işlemini yapan motordur.Eşleyici, public yapıcı olmadan tanımlanır.matcher() metodu ile şablon obje üstünde, eşleyici obje elde edilir.

-PatternSyntaxException: Bir PatternSyntaxException nesnesi kontrolsuz istisnaları belirleyen düzenli istisna şablonudur.(Bu tanım pek iyi olmadı ama ilerde daha açıklayıcı kullanımlar yaparız bunun için :) )

Grupları Yakalama

Grupları yakalama, çoklu karakterlere tekil karakter gibi işlem yapmanın bir yoludur.Örnek olarak, regular ifadeler (dog) d,o,g harflerini içeren tek bir grup oluşturur.

Grupları yakalama parantezler numaralandırılarak yapılır.((A)(B(C))) ifadesinde , örnek olarak gruplandırma şu şekilde yapılır:

-((A)(B(C)))
-(A)
-(B(C))
-(C)
İfadenin ne kadar grubu temsil ettiğini bulmak için groupCount metodu çağrılır.groupCount metodu temsil edilen grup sayısını döndürür.

ÖRNEK:

Aşağıda alfanumerik stringin basamak stringleri bulunuyor:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
public static **** main( String args[] ){

// String to be scanned to find the pattern.
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\\d+)(.*)";

// Create a Pattern object
Pattern r = Pattern.compile(pattern);

// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
} else {
System.out.println("NO MATCH");
}
}
}


Sonuç:
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0


Regular Expression Syntax'ı

Aşağıdaki listede ****karakter syntaxları verilmiştir:
Alt İfade Eşleşme
^ Satırın başını eşler.
$ Satırın sonunu eşler.
. Yeni satır karakteri dışında tekil karakter arar.
[...] Parantezlerdeki herhangi bir karakteri arar.
[^...] Parantez içinde olmayan herhangi bir karakteri arar.
\A Tüm stringin başı
\z Tüm stringin sonu
\Z Satır sonu karakteri dışında en son tekil karakter.
re* İfadeden sonraki 0 veya daha fazla olayı eşler.
re+ 1 veya daha fazla olayı eşler.
re? Sonraki ifadeye göre 0 veya 1 değeri döndürür
re{ n} İfadeden sonraki olayın n sayısını döndürür.
re{ n,} İfadeden sonraki n. olay ve daha sonrasın döndürür.
re{ n, m} İfadeden sonraki en az n ve en çok m olaylarını döndürür.
a| b a veya b'den birini döndürür.
(re) Regular ifadeleri gruplar ve sonraki textler için kaydeder.
(?: re) Regular ifadeleri sadece gruplar
(?> re) Parantezler olmadan, bağımsız regexleri gruplar.
\w Kelime karakterlerini eşler.
\W Sözcük olamayan karakterleri eşler.
\s Boşluk karakterini eşler.
\S Boşluk olmayan karakteri eşler.
\d 0-9 sayı basamaklarını eşler.
\D Basamaksız sayıları eşler.
\A Stringin başını eşler.
\Z Satırın sonunu eşler.Yeni bir satır varsa, yeni satırı eşlemez!
\z Stringin sonunu eşler.
\G Eşlemenin bittiği yeri eşler.
\n Back-reference to capture group number "n"
\b Parantez dışında kelime sınırlarını eşler.
\B Kelime olmayanını sınırlarını eşler.
\n, \t, etc. Yeni satırı eşler.
\Q Escape (quote) all characters up to \E
\E \Q ile alıntılmanın sonunu eşler.

Matcher Sınıfının Metodları:

Aşağıda kullanışlı metotlar listelenmiştir:

Index Metotları:
İndex metotları, eşleşmenin bulunduğu yeri gösteren kullanışlı indexleme metotlarıdır.

SN Metot ve Tanımları
1 public int start()
Önceki eşleşmenin index numarasını döndürür.

2 public int start(int group)
Önceki eşleşme sırasında verilen grubun altdizelerinin başlangıç indexini verir.

3 public int end()
Son eşleşen karakterin offsetini döndürür.

4 public int end(int group)
Son eşleşme sırasında verilen grubun altdizilerinin son karakterinin bir sonraki indexini döndürür.

Study Metotları:(Çalışma Metotları)

Study metotları girdi stringini gösterir ve şablonun bulunup bulunmadığınu bildiren boolean bir değer döndürür.

SN Metot ve Tanımı
1 public boolean lookingAt()
Şablona karşı, alanın başlangıcından başlayarak girdi dizisini eşleştirmeyi dener.

2 public boolean find()
Şablonla eşleşen girdi dizisinin sonraki altdizisini bulmayı dener.

3 public boolean find(int start)
Eşleyiciyi resetler ve şablonla eşleşen girdi dizisinin sonraki altdizisini bulmayı dener.


4 public boolean matches()
Şablona karşı tüm alanı eşlemeyi dener.


Replacement Metotları:


Bu metotlar girdiyi değiştirmek için kullanılır.
SN Metot ve Tanımı
1 public Matcher appendReplacement(StringBuffer sb, String replacement)
Ekleme ve değişirme adımlarını uygular.(non-terminal)

2 public StringBuffer appendTail(StringBuffer sb)
Ekleme ve değiştirme adımlarını uygular(terminal)

3 public String replaceAll(String replacement)
Verilen şablonla eşleşen girdi dizisinin altdizilerini replace eder.

4 public String replaceFirst(String replacement)
Verilen şablonla eşleşen girdi dizisinin ilk altdizesini replace eder.

5 public static String quoteReplacement(String s)
Belirlenen stringin aynısını döndürür.Bu metod , kelimesi kelimesine "s" ile replace ettiği Stringi döndürür.

start ve end Metotları:

Aşağıdaki örnekte "cat" kelimesiin kaç kere geçtiği saydırılıyor:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
private static final String REGEX = "\\bcat\\b";
private static final String INPUT =
"cat cat cat cattie cat";

public static **** main( String args[] ){
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(INPUT); // get a matcher object
int count = 0;

while(m.find()) {
count++;
System.out.println("Match number "+count);
System.out.println("start(): "+m.start());
System.out.println("end(): "+m.end());
}
}
}


Sonuç:
atch number 1
start(): 0
end(): 3
atch number 2
start(): 4
end(): 7
atch number 3
start(): 8
end(): 11
atch number 4
start(): 19
end(): 22


Örnekte, kelime sınırlarının kullanıldığını görebilirsiniz.Bu ayrıca eşleşmenin nerde olduğuyla ilgili birkaç kullanışlı bilgi daha verir.
start metodu eşleşmenin olduğu altdizinin başlangıç indexini verir.end metodu ise sondunu.

matches ve lookingAt Metodu:

Bu metotlar şablona karşı , girilen stringi eşlemeyi dener.Fark ise şudur;matches metodu tüm stringi eşleştirmeyi denerken lookingAt metodu tamamını aramaz.

Aşağıda her iki metot için de örnek verilmiştir:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
private static final String REGEX = "foo";
private static final String INPUT = "fooooooooooooooooo";
private static Pattern pattern;
private static Matcher matcher;

public static **** main( String args[] ){
pattern = Pattern.compile(REGEX);
matcher = pattern.matcher(INPUT);

System.out.println("Current REGEX is: "+REGEX);
System.out.println("Current INPUT is: "+INPUT);

System.out.println("lookingAt(): "+matcher.lookingAt());
System.out.println("matches(): "+matcher.matches());
}
}


Sonuç:
Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false


replaceFirst ve replaceAll Metotları:

Bu metotlar eşleşen texleri replace etmek için kullanılır.Aşağıda bunula ilgili örnek verilmiştir:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
private static String REGEX = "dog";
private static String INPUT = "The dog says meow. " +
"All dogs say meow.";
private static String REPLACE = "cat";

public static **** main(String[] args) {
Pattern p = Pattern.compile(REGEX);
// get a matcher object
Matcher m = p.matcher(INPUT);
INPUT = m.replaceAll(REPLACE);
System.out.println(INPUT);
}
}


Sonuç:
The cat says meow. All cats say meow.


appendReplacement ve appendTail Metotları:

Matcher sınıfı ayrıca, metinler replace etmek için appendReplacement ve appendTail metotlarını destekler.Aşağıda fonksiyonları açıklanmıştır:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
private static String REGEX = "a*b";
private static String INPUT = "aabfooaabfooabfoob";
private static String REPLACE = "-";
public static **** main(String[] args) {
Pattern p = Pattern.compile(REGEX);
// get a matcher object
Matcher m = p.matcher(INPUT);
StringBuffer sb = new StringBuffer();
while(m.find()){
m.appendReplacement(sb,REPLACE);
}
m.appendTail(sb);
System.out.println(sb.toString());
}
}


Sonuç:
-foo-foo-foo-

PatterSyntaxException Sınıf Metotları:

Bir PatterSyntaxException, regular ifade şablonunda bulunan ve syntax hatalarını içeren kontrolsüz hatalardır.PatterSyntaxException sınıfı yanlış giden şeyleri belirlemek için aşağıdaki metotları destekler:

SN Methods with Description
1 public String getDescription()
Hatayı geri çağırır.

2 public int getIndex()
Hata indexini geri çağırır.

3 public String getPattern()
Hatalı regular ifade şablonunu geri çağırır.

4 public String getMessage()
Syntax hatalarını ve index numaralarını içeren hata tanımlarını içeren çok satırlı bilgiyi geri döndürür.



Not: Çevirilerin hepsi benimdir.Aralarda değiştirme, ekleme yapılmıştır.Benden izinsiz kopyalanması ve başka bir yerde yayınlanması durumunda hakkımı helal etmiyorum!
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.