Pattern Matcher

 

Hayirli gunler arkadaslar bugun java'da regex paketini inceliyecez. regex paketinin icinde 4 sinif var biri interface biri Exception dir biz kalan iki sinifi inceleyecez yani
  • java.util.regex.Pattern
  •  util.regex.Matcher
Bu siniflar ayrilmaz ikili gibi dusunun ben bunlari su sekilde aciklayacam diyelimki elimizde bir text var ve ben bu text icindeki yazilari istenilen bir kalip olusturacam ve bu text icinde bu kalba uygun olanlari anip okuyacam iste bu sekilde dusunlmelidir regex paketi burada kalip olustirmamizi Pattern sinifi sagliyor bu kalibi text ile karsilastirip uygun olanlari alamayida  Matcher sinifi sagliyor
kulanacagim birkac methodun ne ise yaradigini yaptigina bakalim gerye kalanlarida ileriki zamanda yazacam.
  • compile(String kalip) : Bu method araciligi ile istenilen kalip hazirlaniyor.
  •  matcher(CharSequence text) : Bu method sayasinde hazilanan kalip ile veriyi eslestirmeye yarar.
  •  find() : yazdigimiz kalip ile veri arasinda eslesme oluyorsa true olmuyorsa false dondurur.
  • group() : Bu ise kaliba uygun olanalari alir. 
Simdi bunu ile ilgili bir uygulama yapacam. Uygulamam su sekilde olacak benim elimde bir String degiskeni var ve bu Stringe bir cok email adresi yazmisim ve ben bu Stringteki email adreslerinin duzgun yazilmis olanlarini almak istiyorum yani benim kalibim bir email adresi www.---------@--------.com iste ben bu kalibi Pattern ile yapip Marcher yardimi ile emaillerin oldugu String'teki emaillar ile esleme yapacam. Uygulamayi adim adim yapacam ve sonra bu adimlari birlestirecem once bu emaillerimin www. uygun olanlarini sonra @ varmi sonraca .com varmi diye yoklayacam ve en son olarakta bunlarin hepsini bir uygulamada birlestirip istenilen uygulamayi elde edecem

Birinci Adim 

public class EmailDemo {
      public static void main(String args[]){ 
            String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
            Pattern pattern = Pattern.compile("www");
            Matcher matcher = pattern.matcher(text);
            while(matcher.find()){
                  System.out.println(matcher.group());
            }
     }
}
 
//Console Output
www
www
www
www
www
www

Burada www. noktayi almak icin \\. isareti kullanacam

public class EmailDemo {
       public static void main(String args[]){
            String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
            Pattern pattern = Pattern.compile("www\\.");
            Matcher matcher = pattern.matcher(text);
            while(matcher.find()){
                   System.out.println(matcher.group());
            }
      }
}
 
//Console Output
www.
www.
www.
www.
www.
www.

Simdide www. ile parcaladigim String degerlerin tamamini gormek icin \\S+isaretini kullanacam

public class EmailDemo {
      public static void main(String args[]){
           String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                  www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
           Pattern pattern = Pattern.compile("www\\.\\S+");
           Matcher matcher = pattern.matcher(text);
           while(matcher.find()){
                  System.out.println(matcher.group());
           }
      }
}
//Console Output 
www.aslan.@hotmail.com
www.imanov@.com
www.memedov@hotmail.
www.tagiyev@hotmail.com
www.xaspoladov@hotmail.com

Boylece birinci adim tamamlandi ve dikkat ediyorsaniz bu kaliba uymuyanlar yazilmadi mesela wwwselcukoglu@hotmail. 'da www dan sonra nokta olmadigi icin bu kaliba uymadi ve eslestirme sirasinda alinmadi.

Ikinci Adim 
@ isaretinin var olup olamadigi ve @ once nokta olmamasini inceliyelim

public class EmailDemo {
      public static void main(String args[]){
            String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
            Pattern pattern = Pattern.compile("[^\\.]@\\S+");
            Matcher matcher = pattern.matcher(text);
            while(matcher.find()){
            System.out.println(matcher.group());
            }
      }
}

//Console Output
u@hotmail.com
v@.com
v@hotmail.
v@hotmail.com
v@hotmail.com

Burada \\. isret nokta manasinda ve su isaret ise ^ nokta olmayanlar manasina gelir bu olamayanlardan kasit sadece nokta degil istenilen isaretten once ^ bunu koyunce o isret olmayana bakar. ve dikkatle bakarsaniz www.aslan.@hotmail adresinde @ once nokta oldugu icin buda eslestirilme sirasinda alinmadi.

Ucuncu Adim 
@------.com seklinde olmasi yani @ten sonra yazi olmali sonra nokta ve sonrada tekrar yazi seklide simdi bunun kalibini olusturalim

public class EmailDemo {
         public static void main(String args[]){
                String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
                Pattern pattern = Pattern.compile("@\\S+\\.[a-z]\\S+");
                Matcher matcher = pattern.matcher(text);
                while(matcher.find()){
                     System.out.println(matcher.group());
                }
        }
}
//Console Output
@hotmail.com
@hotmail.com
@hotmail.com
@hotmail.com

Buradada uymayanlar yine alinmadi mesela www.imanov@.com noktadan once bir yazi olmadigi icin buda alinmadi

Simdi bu yaptiklarimi birlestirince uygulamayi tamalamis oluruz.

public class EmailDemo {
        public static void main(String args[]){
              String text = "wwwselcukoglu@hotmail.com www.aslan.@hotmail.com www.imanov@.com                 www.memedov@hotmail. www.tagiyev@hotmail.com www.xaspoladov@hotmail.com";
              Pattern pattern = Pattern.compile("((www\\.)\\S+)+([^\\.]@\\S+)+(\\.[a-z]\\S+)");
              Matcher matcher = pattern.matcher(text);
              while(matcher.find()){
                     System.out.println(matcher.group());
              }
       }
}
//Console Output

 

 

Pattern ve Matcher

String'lerimizde yer alan değerlerin istediğimiz formaya  uygun olup olmadığıni reges  paketinde yer alan Pattern ve  Matcher sınıfları ile gore  bilerik.. istediyimiz formani duzeltmeyi Pattern sinifi , bu formani 'String' ile muqayise edib uygun olanlari alamayida  Matcher sinifi sagliyor..Istifade edeceyimiz bir nece metodun ne ise  yaradigina  baxaq..

  • compile(String kalip) : Bu method ile isteniler forma hazirlanir
  • matcher(CharSequence text) : Bu method ile hazirlanan formani verilen ile muqayise eder

  •  find() : yazdigimiz forma ile verilen  arasinda eynilik olursa true olmursa false dondurur.
  • group() : Bu ise formaya  uygun olanalari alir. 
Indi ise bir nece numunelere baxaq.....


Bununla ilgili verilen string'in telefon nomresine  uygun olup olmadığına bu numunede baxaq ..





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

public class Main {

  public static void main(String[] args) {

    Pattern pattern = Pattern.compile("5[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]");

    String phoneNumber  = "5550000000";
    Matcher matcher = pattern.matcher(phoneNumber);
 
    if (matcher.matches()) {
      System.out.println(phoneNumber + " is a GSM number.");
    } else {
      System.out.println(phoneNumber + " is not a GSM number.");
    }
  }


CONSOLE:

5550000000 is a GSM number. 

eksine telefon nomresi bu sekilde olarsa:


phoneNumber  = "abcdefgh";

Uyuşma olmayacağı için şu sonucu alırdık: 


abcdefgh is not a GSM number. 



Basqa numune: 


package matcherpatternexample;



import java.util.regex.Pattern;



import java.util.regex.Matcher;


public class Reqemler {

public static void main(String[] args){
//reqemleri tapir
    Pattern kal2=Pattern.compile("[0-9]+");
Matcher esl2=kal2.matcher("4 Aprel 2012 trixinde yazildi");
    while(esl2.find()){
System.out.println("Reqemler-->"+esl2.group());
    }    }  }

CONSOLE:

Reqemler-->4

Reqemler-->2012



eger  Pattern kal2=Pattern.compile("[0-9]"); yazsaydiq onda   

console 

Reqemler-->4
Reqemler-->2
Reqemler-->0
Reqemler-->1
Reqemler-->2


Basqa numune:

package matcherpatternexample;



import java.util.regex.Pattern;



public class PatternSplitExample {

public static void main(String args[]) {

    Pattern p = Pattern.compile(" ");

    String tmp = "this is the String I want to split up";
   String[] tokens = p.split(tmp);
    for (int i = 0; i < tokens.length; i++) {
      System.out.println(tokens[i]);
    }}}

CONSOLE:
this
is
the
String
I
want
to
split
up
Basqa numune:

package matcherpatternexample;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexKullanimi {

public static void main(String[] args) {
//m ile biten ve E ile baslayan kelimeleri bulur.
Pattern kalip=Pattern.compile("E.+?m");
Matcher esl=kalip.matcher("Bu cumlede Ethem tek " +
        "eslesiyor.Evkarlandim bu gun salla");
      while (esl.find()) {
System.out.println("Eslesen-->"+esl.group());
        }    }    }

CONSOLE:
Eslesen-->Ethem
Eslesen-->Evkarlandim
Basqa numune:


import java.util.regex.PatternSyntaxException;
import javax.swing.JOptionPane;
public class GirilenDegerSayimi {
public static void main(String[] args) {
String sayimi=JOptionPane.showInputDialog("Rakam ya da harf girin");
try {
if (sayimi.matches("(?<!\S)\d++(?!\S)")) {
System.out.println("Girilen "+sayimi+" bir rakam ya da sayidir");
} else {
System.out.println(sayimi+" sayi degil bir kelime ya da harftir");
} 
} catch (PatternSyntaxException ex) {
ex.printStackTrace();
}
}
}

Yorumlar

Bu blogdaki popüler yayınlar

İNGİLİS DİLİNDƏ ƏN ÇOX İSTİFADƏ OLUNAN 2600 CÜMLƏ QƏLİBLƏRİ VƏ 6000 SÖZ

INGILIS DILI BUTUN ZAMANLAR