Pattern Matcher
java.util.regex.Matcher and java.util.regex.Pattern
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
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.
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.
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.");
}
}
}
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
Yorum Gönder