www.fatihkabakci.com

Personal Website and Computer Science TUR EN

JAVA REGULAR EXPRESSION(DUZENLI DEYIM)

Last update: 1/13/2015 10:37:00 AM

Yazan:Fatih KABAKCI

Java belirli bir kalıba, desene (pattern) uyan karakter eşlemesine destek verir. Düzenli Deyim(Regular Expression), ile çeşitli karakter sınıfları tanımlayarak belirli bir harf, sayı, kelime veya cümle kalıpları oluşturulabilir ve bu kalıplar işlenerek çeşitli eşleşmelerin kontrolleri sağlanabilir. Kısaca regex olarak adlandırılan deyim işleme, java.util.regex API' si içinde tanımlanmıştır. Bu API' nin en önemli iki temel sınıfı Pattern ve Matcher sınıflarıdır. Bir pattern ile karakter deseni tanımlayıp, bir matcher yardımıyla bu karakter desenine çeşitli eşleme işlemleri yapabilirsiniz.

Aşağıda Oracle' ın hazırladığı bir test programı verilmektedir.http://docs.oracle.com/javase/tutorial/essential/regex/test_harness.html. Bu test programı, temel pattern-matcher kullanımı gösterir ve yazı içerisinde açıklanacak örneklerin koşulduğu programdır.

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

public class RegexTestHarness {

    public static void main(String[] args){
        Console console = System.console();
        if (console == null) {
            System.err.println("No console.");
            System.exit(1);
        }
        while (true) {

            Pattern pattern = 
            Pattern.compile(console.readLine("%nEnter your regex: "));

            Matcher matcher = 
            pattern.matcher(console.readLine("Enter input string to search: "));

            boolean found = false;
            while (matcher.find()) {
                console.format("I found the text" +
                    " \"%s\" starting at " +
                    "index %d and ending at index %d.%n",
                    matcher.group(),
                    matcher.start(),
                    matcher.end());
                found = true;
            }
            if(!found){
                console.format("No match found.%n");
            }
        }
    }
}

Yukarıdaki programda sonsuz döngü içerisinde kullanıcıdan bir pattern, bir de matcher girdisi istenmektedir. find() metodu şayet bir eşleşme var ise true döner. Matcher sınıfına ait bir metot olan group() eşleşen kelime veya cümle gruplarını döndürür. start() ve end() metotları ise sırasıyla, eşleşmenin başlangıç ve bitiş indekslerini gösterir. Test Harness programı eğer herhangi bir eşleşme bulamazsa konsol ekranına No match found yazar ve tekrardan başa döner.

Bu yazıda da Oracle' ın hazırladığı http://docs.oracle.com/javase/tutorial/essential/regex/index.html örneklerden yararlanılacaktır.

Character Classes(Karakter Sınıfları)

Aşağıdaki tabloda java regex' in temel ifadeleri gösterilmektedir. Konuya örnekler üzerinden devam edilecektir. http://docs.oracle.com/javase/tutorial/essential/regex/char_classes.html
İfade Tanım
[abc]    a, b, ya da c (basit sınıflar)
[^abc]    a, b, veya c dışında herhangi bir karakter (tersi)
[a-zA-Z]    a dan z ye, veya A dan Z ye (aralık)
[a-d[m-p]]    a dan d, veya m den p: [a-dm-p] (birleşim)
[a-z&&[def]]    d, e, veya f (kesişim)
[a-z&&[^bc]]    a dan z, b ve c hariç: [ad-z] (çıkarma)
[a-z&&[^m-p]]    a dan z, ve m den p değil: [a-lq-z] (çıkarma)

Simple Classes(Basit İfadeler)

Enter your regex: [bcr]at
Enter input string to search: bat
I found the text "bat" starting at index 0 and ending at index 3.

Enter your regex: [bcr]at
Enter input string to search: cat
I found the text "cat" starting at index 0 and ending at index 3.

Enter your regex: [bcr]at
Enter input string to search: rat
I found the text "rat" starting at index 0 and ending at index 3.

Enter your regex: [bcr]at
Enter input string to search: hat
No match found.

Köşeli parantez [ ] içerisine yazılan her bir karakter 'OR', 'VEYA' işlemi olarak görülür. [bcr] ifadesi b, c ya da r karakterlerinden herhangi biri anlamına gelir. Yukarıdaki örneklerde 'hat' girdisi haricindeki eşleşmeler gerçekleşir.

Negation(Olumsuzluk)

Enter your regex: [^bcr]at
Enter input string to search: bat
No match found.

Enter your regex: [^bcr]at
Enter input string to search: cat
No match found.

Enter your regex: [^bcr]at
Enter input string to search: rat
No match found.

Enter your regex: [^bcr]at
Enter input string to search: hat
I found the text "hat" starting at index 0 and ending at index 3.

Olumsuzluk, ^ şapka karakteri ile ifade edilir. Karakterler ya da karakter kümelerinin başına gelerek, haricinde anlamı verir. [^bcr] ifadesi b, c ya da r haricindeki karakterler ile eşlenir.

Ranges(Aralıklar)

Enter your regex: [a-c]
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: [a-c]
Enter input string to search: b
I found the text "b" starting at index 0 and ending at index 1.

Enter your regex: [a-c]
Enter input string to search: c
I found the text "c" starting at index 0 and ending at index 1.

Enter your regex: [a-c]
Enter input string to search: d
No match found.

Enter your regex: foo[1-5]
Enter input string to search: foo1
I found the text "foo1" starting at index 0 and ending at index 4.

Enter your regex: foo[1-5]
Enter input string to search: foo5
I found the text "foo5" starting at index 0 and ending at index 4.

Enter your regex: foo[1-5]
Enter input string to search: foo6
No match found.

Enter your regex: foo[^1-5]
Enter input string to search: foo1
No match found.

Enter your regex: foo[^1-5]
Enter input string to search: foo6
I found the text "foo6" starting at index 0 and ending at index 4.

Aralık(range), bir sayı veya karakter aralığı belirtir. [a-c] ifadesi ile a' dan c' ye kadar olan karakterler(a,b,c), [1-5] ifadesi ile 1' den 5' e kadar olan sayılar(1,2,3,4,5) anlamı verir. Olumsuzluk(negation) burada da kullanılabilir. [^a-c] ifadesi a, b ve c haric karakterler demektir.

Union(Birlikler)

Enter your regex: [0-4[6-8]]
Enter input string to search: 0
I found the text "0" starting at index 0 and ending at index 1.

Enter your regex: [0-4[6-8]]
Enter input string to search: 5
No match found.

Enter your regex: [0-4[6-8]]
Enter input string to search: 6
I found the text "6" starting at index 0 and ending at index 1.

Enter your regex: [0-4[6-8]]
Enter input string to search: 8
I found the text "8" starting at index 0 and ending at index 1.

Enter your regex: [0-4[6-8]]
Enter input string to search: 9
No match found.

Birlikler(union), iki ayrı karakter sınıfını birlikte yazmak, yani birleşimini almak anlamına gelir. [0-4[6-8]] ifadesi ile 5 hariç 0,1,2,3,4,6,7,8 karakterleri demektir.

Intersection(Kesişim)

Enter your regex: [0-9&&[345]]
Enter input string to search: 3
I found the text "3" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[345]]
Enter input string to search: 4
I found the text "4" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[345]]
Enter input string to search: 5
I found the text "5" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[345]]
Enter input string to search: 2
No match found.

Enter your regex: [0-9&&[345]]
Enter input string to search: 6
No match found.

Kesişme(intersection), ayrı iki karakter sınıfının && ifadesi ile ortak olanların kesişmesi anlamına gelir. [0-9&&[345]] ile 0,1,2,3,4,5,6,7,8,9 ile 3,4,5 in ortak olanlarını elde et demektir. Bu durumda 3,4,5 seçilir.

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 3
No match found.

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 4
I found the text "4" starting at index 0 and ending at index 1.

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 5
I found the text "5" starting at index 0 and ending at index 1.

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 6
I found the text "6" starting at index 0 and ending at index 1.

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 7
No match found.

[2-8&&[4-6]] ifadesi 2,3,4,5,6,7,8 ile 4,5,6 karakter aralıklarının ortak olan, 4,5,6 karakterleri seçilir.

Substraction(Çıkarma)

Enter your regex: [0-9&&[^345]]
Enter input string to search: 2
I found the text "2" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 3
No match found.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 4
No match found.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 5
No match found.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 6
I found the text "6" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 9
I found the text "9" starting at index 0 and ending at index 1.

Çıkarma(substraction) işleminde &&(Kesişim) ve ^(Olumsuzluk) karakterleri kullanılarak, istenilmeyen karakterler seçimden çıkarılır. [0-9&&[^345]] ifadesi ile 3,4,5 karakterleri dışında olan karakterlerin ortak elemanlarını seç anlamı çıkar. Yani 0,1,2,3,4,5,6,7,8,9 içinden 3,4,5 olanlar hariç diğer karakterleri al demektir. 0,1,2,6,7,8,9 seçilir.

Ön Tanımlı Karakter Sınıfları

Predefined character classes(Ön tanımlı karakter sınıfları), sayısal, sözel ve özel ifadeleri simgeleyen önceden tanımlanmış karakterlerdir. Aşağıdaki tabloda her biri açıklanmaktadır. http://docs.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html
İfade Tanım
.    Herhangi bir karakter
\d    Bir rakam [0-9]
\D    Rakam olmayan [^0-9]
\s    Bir boşluk karakteri [ \t\n\x0B\f\r]
\S    Boşluk olmayan karakter [^\s]
\w    Bir kelime karakteri [a-zA-Z_0-9]
Bir özel karakter    [^\w]

. nokta karakteri herhangi bir karakter anlamına gelir. \d sayilar, \s space(boşluk) karakterleri, \w word(kelime) karakterleri(özel olmayan karakterler) için kullanılır. Bunların büyük formda yazılmış halleri de tam tersi anlamında kullanılır. \D karakterler, \S boşluk olmayan karakterler, \W özel karakterler için kullanılır.

Enter your regex: .
Enter input string to search: @
I found the text "@" starting at index 0 and ending at index 1.

Enter your regex: . 
Enter input string to search: 1
I found the text "1" starting at index 0 and ending at index 1.


Enter your regex: .
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: \d
Enter input string to search: 1
I found the text "1" starting at index 0 and ending at index 1.

Enter your regex: \d
Enter input string to search: a
No match found.

Enter your regex: \D
Enter input string to search: 1
No match found.

Enter your regex: \D
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: \s
Enter input string to search:  
I found the text " " starting at index 0 and ending at index 1.

Enter your regex: \s
Enter input string to search: a
No match found.

Enter your regex: \S
Enter input string to search:  
No match found.

Enter your regex: \S
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: \w
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: \w
Enter input string to search: !
No match found.

Enter your regex: \W
Enter input string to search: a
No match found.

Enter your regex: \W
Enter input string to search: !
I found the text "!" starting at index 0 and ending at index 1.

Yukarıdaki örneklerde sırasıyla, @ herhangi bir karakter, 1 herhangi bir karakter, a herhangi bir karakter, 1 bir rakam, a bir rakam değil, 1 bir harf değil, a bir harf, " " bir boşluk, a bir boşluk değil, " " bir boşluk olmayan karakter değil, a bir boşluk olmayan karakter, a bir harf, ! ünlem bir harf değil, a bir özel karakter değil ve son olarak ! ünlem bir özel karakter oldukları gösterilmiştir.

Quantifiers(Nicelik Belirteçleri)

Quantifiers(Nicelik Belirteçleri), greedy(istekli), reluctant(isteksiz) ve possessive(sahiplik) belirteçleri olarak gruplanır. http://docs.oracle.com/javase/tutorial/essential/regex/quant.html
Greedy Reluctant Possessive Meaning
X? X?? X?+ X , bir ya da sıfır kez
X* X*? X*+ X , sıfır ya da n kez
X+ X+? X++ X , bir ya da n kez
X{n} X{n}? X{n}+ X , X' den n kez
X{n,} X{n,}? X{n,}+ X , en az n kez
X{n,m} X{n,m}? X{n,m}+ X , en az n en çok m kez

Greedy(İstekli)

Karakter (+) Quantifier ifadelere denir. Karakterin yanına eklenerek, eklendiği karakter deseninin;
? -> 0 yada 1 adet varlığı. 
* -> 0 yada n adet varlığı. 
+ -> 1 yada n adet varlığı araştırılır.

Reluctant(Gönülsüz)

Karakter (+) Quantifier (+) ? ifadelere denir. Karakterin yanına eklenerek, eklendiği karakter deseninin;
?? -> 0 yada 1 adet varlığı. 
*? -> 0 yada n adet varlığı, 
+? -> 1 ya da n adet varlığı araştırılır.

Possesive(Tutucu)

Karakter (+) Quantifier (+) + ifadelere denir. Karakterin yanına eklenerek, eklendiği karakter deseninin;
?+ -> 0 yada 1 adet varlığı. 
*+ -> 0 ya da n adet varlığı. 
++ -> 1 ya da n adet varlığı araştırılır.
Enter your regex: a?
Enter input string to search: 
I found the text "" starting at index 0 and ending at index 0.

Enter your regex: a*
Enter input string to search: 
I found the text "" starting at index 0 and ending at index 0.

Enter your regex: a+
Enter input string to search: 
No match found.
a? ifadesi -> a’ dan 0 ya da 1 tane olacak demektir (0<=a<=1)  
a* ifadesi -> a’ dan 0 ya da n tane olacak demektir (0<=a<=n)
a+ ifadesi -> a’ dan 1 ya da n tane olacak demektir (1<=a<=n)

Sıfır Uzunluklu Eşleşmeler

Bir önceki, ilk iki örnekte a? ve a* sayesinde a karakterinin yokluğunu eşleşmeye tabi idi. a karakterinin yokluğu başlangıç ve bitiş indekslerinin 0 olması anlamına gelir. Boş "" girdi dizgisinin uzunluğu sıfır olduğu için başlangıç ve bitiş indeksleri de sıfırdır. Bu tür eşleşmeler sıfır-uzunluklu eşleşmeler(zero-length matches) olarak adlandırılır. Sıfır-uzunluklu eşleşmeler(Zero-length matches), boş bir girdi dizgisinde, girdi dizgisinin, başında, son karakterinden sonra veya herhangi iki karakteri arasında oluşabilir. Aşağıda örnekler verilmektedir.

Enter your regex: a?
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.
I found the text "" starting at index 1 and ending at index 1.

Enter your regex: a*
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.
I found the text "" starting at index 1 and ending at index 1.

Enter your regex: a+
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

a? ifadesi ile a dan 0 ya da 1 adet bulunur. a* ile a dan 0 ya da n=1 adet bulunur. a+ ile a dan 1 ya da n=1 adet bulunur.


Enter your regex: a?
Enter input string to search: aaaaa
I found the text "a" starting at index 0 and ending at index 1.
I found the text "a" starting at index 1 and ending at index 2.
I found the text "a" starting at index 2 and ending at index 3.
I found the text "a" starting at index 3 and ending at index 4.
I found the text "a" starting at index 4 and ending at index 5.
I found the text "" starting at index 5 and ending at index 5.

Enter your regex: a*
Enter input string to search: aaaaa
I found the text "aaaaa" starting at index 0 and ending at index 5.
I found the text "" starting at index 5 and ending at index 5.

Enter your regex: a+
Enter input string to search: aaaaa
I found the text "aaaaa" starting at index 0 and ending at index 5.

a? paterni, aaaaa için uygulandığında 0 ya da 1 kuralı ile, 5 uzunluklu her biri için ayrı ayrı 5 kere a bulunur. 0 kuralı içinde 1 adette boş string bulunur.
a* paterni, aaaaa için uygulandığında 0 ya da n kuralı ile, iki sonuç verir. n=5 kuralı için tek seferde 5a, n=0 kuralı için boş string basılır.
a+ paterni, aaaaa için uygulandığında 1 ya da n kuralı ile tek sonuç verir. n=1 kuralı için tek seferde 5a basılır. 1 ya da n kuralında n=1 olduğu için 1 ya da 1’ den sonuç 1 olarak bulunur ve aranan matcher string 1 sefer basılır.


Enter your regex: a?
Enter input string to search: ababaaaab
I found the text "a" starting at index 0 and ending at index 1.
I found the text "" starting at index 1 and ending at index 1.
I found the text "a" starting at index 2 and ending at index 3.
I found the text "" starting at index 3 and ending at index 3.
I found the text "a" starting at index 4 and ending at index 5.
I found the text "a" starting at index 5 and ending at index 6.
I found the text "a" starting at index 6 and ending at index 7.
I found the text "a" starting at index 7 and ending at index 8.
I found the text "" starting at index 8 and ending at index 8.
I found the text "" starting at index 9 and ending at index 9.

Enter your regex: a*
Enter input string to search: ababaaaab
I found the text "a" starting at index 0 and ending at index 1.
I found the text "" starting at index 1 and ending at index 1.
I found the text "a" starting at index 2 and ending at index 3.
I found the text "" starting at index 3 and ending at index 3.
I found the text "aaaa" starting at index 4 and ending at index 8.
I found the text "" starting at index 8 and ending at index 8.
I found the text "" starting at index 9 and ending at index 9.

Enter your regex: a+
Enter input string to search: ababaaaab
I found the text "a" starting at index 0 and ending at index 1.
I found the text "a" starting at index 2 and ending at index 3.
I found the text "aaaa" starting at index 4 and ending at index 8.

İlkinde, her a için basarken, a olmayan her b içinde zero-length match kuralından dolayı boş string basar. En sonunda bir de genel a?(0 ya da 1) kuralından ötürü boş string basar.

İkincisinde, her a serisi için 1 adet basarken, a olmayan her b için boş string basar. 4a yanyana iken seri 4 olduğu için kalan tüm a ları basar.(0 ya da n kuralı)

Son örnekte, a+(1 ya da n) kuralından ötürü, her a serisi sayısı için basma yapar. a olmayan hiç bir karakteri basmaz.

Süslü Parantez(Curly Bracket)

Enter your regex: a{3}
Enter input string to search: aa
No match found.

Enter your regex: a{3}
Enter input string to search: aaa
I found the text "aaa" starting at index 0 and ending at index 3.

Enter your regex: a{3}
Enter input string to search: aaaa
I found the text "aaa" starting at index 0 and ending at index 3.

Enter your regex: a{3}
Enter input string to search: aaaaaaaaa
I found the text "aaa" starting at index 0 and ending at index 3.
I found the text "aaa" starting at index 3 and ending at index 6.
I found the text "aaa" starting at index 6 and ending at index 9.

Curly brackets arasındaki sayı, karakterin önüne gelerek, ilgili karakterden kaç adet olacağını belirtir. Aranan karakter uzunluğunu adete göre gruplayarak tekrar eder.

Enter your regex: a{3,}
Enter input string to search: aaaaaaaaa
I found the text "aaaaaaaaa" starting at index 0 and ending at index 9.

Sayıdan sonra virgül var ise, en fazla ne kadar olur ise. En az 3 en fazla aranan text length

Enter your regex: a{3,6} // find at least 3 (but no more than 6) a's in a row
Enter input string to search: aaaaaaaaa
I found the text "aaaaaa" starting at index 0 and ending at index 6.
I found the text "aaa" starting at index 6 and ending at index 9.

Virgülden sonra ikinci sayı, en fazla anlamına gelir. En az 3 en fazla 6 olarak gruplanır.

Gruplar ve Belirteçler ile Karakter Sınıflarının Kullanımı

Enter your regex: (dog){3}
Enter input string to search: dogdogdogdogdogdog
I found the text "dogdogdog" starting at index 0 and ending at index 9.
I found the text "dogdogdog" starting at index 9 and ending at index 18.

Enter your regex: dog{3}
Enter input string to search: dogdogdogdogdogdog
No match found.

Enter your regex: dog{3}
Enter input string to search: doggg
I found the text "doggg" starting at index 0 and ending at index 5.

Parantez ile alındığında grup olarak ele alınır. İlk örnekte dog kelimesi 3’ er kere tekrar eder. İkinci örnekte ise sadece g 3 kez tekrar eden bir patern oluşturur. Yani üçüncü örnekteki doggg paterne uyar.

Enter your regex: [abc]{3}
Enter input string to search: abccabaaaccbbbc
I found the text "abc" starting at index 0 and ending at index 3.
I found the text "cab" starting at index 3 and ending at index 6.
I found the text "aaa" starting at index 6 and ending at index 9.
I found the text "ccb" starting at index 9 and ending at index 12.
I found the text "bbc" starting at index 12 and ending at index 15.

Enter your regex: abc{3}
Enter input string to search: abccabaaaccbbbc
No match found.

[abc]{3} ifadesi, 3*3*3=27 farklı dizilimi Kabul eder. [] metakarakterleri içinde yazılan her bir karakter, sıralama farketmeksizin tespit edildiği anda kabul edilir. İkinci örnekte ise {3} yalnızca abccc gibi girdiler için kabul görür.

Greedy, Reluctant ve Possessive Belirteçleri Arasındaki Farklılıklar

http://www.fatihkabakci.com/Makaleler-GREEDY_RELUCTANT_ve_POSSESSIVE_ARASINDAKI_FARKLAR

Grup İşlemleri

Gruplar parantezler ile belirtilir.

Numaralandırma

Bir ifade de, soldan sağa doğru her parantez grubu ayrı ayrı olarak ele alınır. Örneğin ((A)(B(C))) ifadesi toplamda 4 grup içerir.
(A), (B(C)), (C) ve ((A)(B(C))).

Değişkenler

Backreferences, esasen düzenli deyimlerde değişken olarak adlandırılırlar. \ predefined characterler + \ digit formatında tanımlanır. Burada gelecek karakteri belirten bir tanım karakteri ile birlikte bu karaktere bir Numara atanır. Daha sonar ilgili değişkene bu Numara ile erişilir.

Enter your regex: (\d\d)\1
Enter input string to search: 1212
I found the text "1212" starting at index 0 and ending at index 4.

Bu örnekte, sırası ile iki sayısal numaraya 1 ve 2 atanır. Bu 12 grubu \1 değişkenine refere edilir.

Enter your regex: (\d\d)\1
Enter input string to search: 1234
No match found.

Bu örnekte ise 12 grubu \1 değişkeni ile refere edildikten sonra, 34 ile eşlenmez.

Boundary Matchers(Sınırlandırılmış Eşleyiciler)

http://docs.oracle.com/javase/tutorial/essential/regex/bounds.html

Sınır ifadeler

Tanım

^

Satır başı

$

Satır sonu

\b

Sınırlı bir kelime

\B

Sınırlı olmayan bir kelime

\A

Girdinin başı

\G

Bir önceki eşleşmenin sonu

\Z

Girdinin sonu fakat but varsa son sonlandırıcı için

\z

Girdinin sonu


Enter your regex: ^dog$
Enter input string to search: dog
I found the text "dog" starting at index 0 and ending at index 3.

Enter your regex: ^dog$
Enter input string to search:       dog
No match found.

Enter your regex: \s*dog$
Enter input string to search:             dog
I found the text "            dog" starting at index 0 and ending at index 15.

Enter your regex: ^dog\w*
Enter input string to search: dogblahblah
I found the text "dogblahblah" starting at index 0 and ending at index 11.

İlk örnekte dog kelimesinin başında ve sonunda başka bir karakter olmayacak şekilde desen oluşturulmuştur. Eşleşme başarılıdır. İkinci örnekte dog' un önünde boşluk karakterleri olduğu için eşleşme başarısız olmuştur. Üçüncü örnekte dog' dan önce n adet boşluk karakterinden sonra dog kelimesi getirilecek şekilde desen tasarlandığı için eşleşme başarılıdır. Son örnekte ise dog ile başlayıp n sayıda karakter kuralı yine eşleşmeyi başarılı kılmıştır.

Enter your regex: \bdog\b
Enter input string to search: The dog plays in the yard.
I found the text "dog" starting at index 4 and ending at index 7.

Enter your regex: \bdog\b
Enter input string to search: The doggie plays in the yard.
No match found.

Yukarıdaki iki örnekte girdi cümleleri dog ile sınırlandırılmıştır. Dolayısıyla girilen cümlelerde yalnızca dog kelimeleri var mı diye bakılır.

Enter your regex: \bdog\B
Enter input string to search: The dog plays in the yard.
No match found.

Enter your regex: \bdog\B
Enter input string to search: The doggie plays in the yard.
I found the text "dog" starting at index 4 and ending at index 7.

Yukarıdaki örneklerde ise, bu sefer dog kelimesi başka bir kelime içinde geçiyor mu ya bakılmaktadır.

Enter your regex: dog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.
I found the text "dog" starting at index 4 and ending at index 7.

Enter your regex: \Gdog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.

\G bir önceki eşleşmenin sonu anlamına gelir. İkinci örnekte, dog kelimesinin ikinci kez meydana gelişi, bir önceki eşleşmenin sonunda olmaz. Yani aşağıdaki durumda ancak eşleşme başarılı olacaktır.

Enter your regex: \Gdog 
Enter input string to search: dogdog
I found the text "dog" starting at index 0 and ending at index 3.
I found the text "dog" starting at index 3 and ending at index 6.

Bayraklar(Flags)

http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html

Sabit

Gömülü Bayrak Deyiminin Karşılığı

Pattern.CANON_EQ

None

Pattern.CASE_INSENSITIVE

(?i)

Pattern.COMMENTS

(?x)

Pattern.MULTILINE

(?m)

Pattern.DOTALL

(?s)

Pattern.LITERAL

None

Pattern.UNICODE_CASE

(?u)

Pattern.UNIX_LINES

(?d)


Pattern pattern = Pattern.compile(console.readLine("%nEnter your regex: "), Pattern.CASE_INSENSITIVE);

Bir Pattern oluştururken, overloaded edilmiş compile metodunun yukarıdaki ikinci versiyonu kullanılır. İkinci versiyonda Pattern sınıfında sabit olarak tanımlanmış çeşitli flag' lar bulunur. Bu flaglardan bir den fazla kullanılmak istenirse |(bitwise or) operatörü ile birlikte kullanılır.

Enter your regex: dog
Enter input string to search: DoGDOg
I found the text "DoG" starting at index 0 and ending at index 3.
I found the text "DOg" starting at index 3 and ending at index 6.

Yukarıdaki paterne uygun örnekte, dog kelimesi büyük küçük harf ayırt etmeksizin yukarıda gösterilen sonuçları verir.
There has been no comment yet

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.