Navigate / search

split() ile Metni Özel Bir Karakterle Diziye Bölmek

Dizilere bölmek,Diziye Bölmek,Split komutunun kullanımı…..

Bir değişken içindeki bazı metinleri sayıları birbirinden bağımsız hale getirmemiz gerekir.Birbirinden bağımsız derken her birini farklı bir değişkene atmak yada bir dizi içinde ayırmak olabilir.Şimdi bir örnek yapalım.Bir değişken içerisinde 5 6 farklı kişnin adının kaydedildiğini varsayalım.Bunlarında virgül ile ayrıldığını düşünürsek şu şekilde isimleri bir diziye aktarabiliriz.

1
2
$isimler="ali,ahmet,veli,murat,hasan";
$isimler_dizi=split("[,]",$isimler);

Bu şekilde her kişi adını bir dizi içine atmış olduk.Şimdi bunları foreach ile yazdıralım.

1
2
3
4
5
$isimler="ali,ahmet,veli,murat,hasan";
$isimler_dizi=split("[,]",$isimler);
foreach ($isimler_dizi as $isim){
      echo $isim."<br>";
}

Örneği çalıştırdıysanız her bir ismin farklı farklı tutulduğunu göreceksiniz.
Şimdi biraz daha detaylı bir örnek yapalım.Bu sefer split() fonksiyonunun farklı bir kullanımını göreceğiz.Fonksiyonu kullanırken bir ayraç kullanmıştık.O ayracı her gördüğünde metni dizilere ayırıyordu.İşte o ayraç sayısını istediğimiz şekilde arttırabiliriz.Örneğin hem virgül hem nokta hemde soru işaret olan kısımları ayır diyebiliriz.

Örneğin web sitesinde kullanıcının doldurup bize gönderdiği bir form var.bu formada tarihi gün ay yıl olarak girecektir.Kimi kullanıcı gün ay yıl ı yazarken aralara “.” kimi kullanıcı ” /” kimi kullanıcı ise ” – ” koyabilir.Explode fonksiyonunda böyle bir istisnai durumu çözmemize imkan yoktur.Yine örneğimizden yola çıkarak biz bu tarihleri 3 farklı karakter kullanılarakta yapsak sorun çıkmadan nasıl yaparız.
Komutu şu şekilde kullanmamız gerekicek: split(“[/-.]“,$tarih)

1
2
$tarih="24/02/1987";
$detayli_tarih=split("[/-.]",$tarih);

ereg_replace() Aranan Karakterleri Başka Karakterle Değiştirmek

Ereg ve eregi fonksiyonlarını bir önceki derste görmüştük.Bu fonksiyonlar sadece karşılaştırıyor,  komuttaki arama desenine uyuyorsa yeni değişkenimize bilgileri aktarıyor.Direk olarak aktarmasını istemeyipte değiştirerek aktarmasını isteyebiliriz.

Word yada benzeri kelime işleme programlarında Bul ve Değiştir özelliğini kullanmışsınızdır.Kullanmayanlar CTRL+F yapıp bul ve değiştir özelliğini deneyebilirler.İşte ereg_replace fonksiyonumuzda bu ve değiştir görevi yapar.

Bir örnekle açıklamak gerekirse örneğin bir metin içinde “x” harflerini “ks” harfleriyle değiştirebiliriz.Bir metin içinde defalarca “maximum” kelimesi yazdığımızı düşünelim.Daha sonrada bunu x kullarak değilde “maksimum şeklinde yazmamız gerektiğini düşünebiliriz.Bir kere bu kelimeyi kullaşmış olsaydık belki elimizde silip düzeltebilirdik ama onlarca olduğunu varsayarsak zamanımızı çalabilir.İşte bunu bul ve değiştir işlemiyle yapabiliyoruz yani ereg_replace ile…..Diyoruzki “x” leri bul ve “ks” ile değiştir.Komut olarak yazılışını göstermek gerekirse;

ereg("x","ks",$degisken);

Şimdi bahsettiğimiz açıklamaya uygun çalışır bir kod yazalım.İlk önce içinde maximum geçen bir metin yazalım.Ve sonra bu metni ekrana yazdıralım.Daha sonra ereg_replace fonksiyonunu uygulayarak metnimizi değişikliğe uğratıp yazdıralım.

1
2
3
4
5
$metin="Maximum Kas İçin Örnek Program.Kaslarınızın En Kısa Sürede Maximum Güçlenmesi.Maximum Enerji Yakımı<br>";
echo $metin;
echo "------------------------------------------------------------------------<br>";
$yeni_metin=ereg_replace("x","ks",$metin);
echo $yeni_metin;

Ve işte sonuç…Anlattığımız gibi değil mi ?

Maximum Kas Için Örnek Program.Kaslarinizin En Kisa Sürede Maximum Güçlenmesi.Maximum Enerji Yakimi
------------------------------------------------------------------------
Maksimum Kas Için Örnek Program.Kaslarinizin En Kisa Sürede Maksimum Güçlenmesi.Maksimum Enerji Yakimi

NOT# Ereg fonksiyonunda eregi fonksiyonunuda görmüştük.Aynı işleri yaparlardı.Fakat ereg büyük küçük harfle duyarlı eregi ise duyarlı değildi.
Ereg_replace fonksiyonuda büyük küçük harflere duyarlıdır.Fakat eregi_replace fonksiyonu duyarlı değildir.

Düzenli İfadeler Karakter Gruplamarı

Karakter Gruplamaları

PHP’de düzenli ifadelerde kolaylık sağlayan ve mesela ziyaretçinin girdiği bir bilgi içinde olmaması gereken karakterleri bulmamıza imkan veren karakter gruplamalarını kullanabiliriz. Örneğin bütün Türkçe karakterleri aratmak için aşağıdaki gruplama kullanılabilir:

 [ĞÜŞİÖÇŞğüşıöç]

Karakter gruplamaları köşeli parantezler ile yapılır. Bu gruplama ile içinde herhangi bir Türkçe karakter bulunan bütün değerleri eşleştirecektir. Bu yöntemle, şu gruplamalar yapılabilir:

Sözgelimi, bir metin içinde a4, a5, a6 gibi birincisi küçük harf, ikincisi rakam olan iki karakterlik dizileri bulmak istiyorsak, arama grubu şöyle olacaktır:

 ^[a-z][0-9]$

Bu deyim PHP’ye, a’da z’ye küçük harfle başlayan ve sonunda 0-9 arasındaki herhangi bir rakam bulunan kelimeleri buldurur. PHP, bu kelimenin sadece iki harfli olmasına dikkat edecektir.

^ işareti, köşeli parantez içinde yani gruplamada kullanılırsa, bu olumsuzluk anlamı taşır. Örneğin, iki rakamlı ancak birinci karakteri rakam olmayan fakat ikinci karakteri rakam olan değerlerin bulunması için şu deyim gerekir:

 ^[^0-9][0-9]$

Burada en baştaki ^işareti “başında” demektir; ancak hemen arkasından gelen grupta “rakam olmayan” demiş oluyoruz; ikinci grup ve sonundaki $ işareti ile “rakamla biten” anlamına geliyor. Deyimde sadece baş ve sonu gösteren iki eşleştirme unsuru bulunduğuna göre bu deyim, “başında rakam olmayan, sonunda rakam olan iki karakterli değerleri” bulmaya yarayacaktır. Bu deyim yukarıdaki a4,a5,a6 kelimelerinin hepsini bulacaktır. Yani yukarıdaki grup bu şekilde de yazılabilir. Tek fark var bu yazılan A5, A6’yı da bulacaktır çünkü harf büyüklüğü belirtilmemiş, rakam olmayacak denmiş. Bu yöntemle şu gruplamaları yapabiliriz:

 [^a-z]   Küçük harf olmayan herhangi bir harfi bulur.
 [^A-Z]   Büyük harf olmayan herhangi bir harfi bulur.
 [^\\\/\^]   \ , / veya ^ dışında herhangi bir karakteri bulur.
 [^\"\']   Çift ve tek tırnak dışında herhangi bir karakteri bulur.

Grup oluşturmada da bazı özel karakterler vardır. Örneğin nokta işareti ( . ), yeni satır başlangıcı olmayan (yani newline olmayan) herhangi bir karakter anlamına gelir. Dolayısıyla,

 ^.5$

deyimi yeni satırla başlamayan ve 5 ile biten herhangi iki karakterli metni bulacaktır.
PHP’nin kullanıma hazır(built-in) özel eşleştirme gruplamaları da vardır:

 [[:alpha:]]  Herhangi bir harf
 [[:digit:]]   Herhangi bir rakam
 [[:alnum:]]   Herhangi bir harf veya rakam
 [[:space:]]   Herhangi bir boşluk karakterini
 [[:upper:]]   Herhangi bir büyük harf
 [[:lower:]]  Herhangi bir küçük harf
 [[:punc:]]  Herhangi bir noktalama işareti
 [[:xdigit:]]  Herhangi bir Hexadecimal karakter.  [0-9a-fA-F]

Karakter eşleştirmede tekrar sayısı da bir özellik olarak kullanılabilir. Tekrar sayısı belirtmek için süslü parantez { } kullanılır.

 ^b{4}$   İçinde dört adet küçük b harfi bulunan kelimeleri seç: bbbb.
 ^b{2,4}$   İçinde iki üç veya dört adet küçük b harfi bulunan kelimeleri seç: bb, bbb,
bbbb gibi
 ^b{2,}   İki veya daha fazla küçük b harfi bulunan kelimeleri seç: abb, abbb, abbbb
gibi. Bu deyim "ab" kelimesini seçmez.
 \t{2}   Ardarda iki sekme işaretini bul
 .{2}  Herhangi çift karakteri bul: bb, $$, ğğ gibi
 ^\-{0,1}[0-9]{1,}$   Negatif veya pozitif herhangi bir tam sayıyı bul
 ^[0-9]{1,}$  Pozitif herhangi bir tam sayıyı bul

Bu tür deyim oluşturma işlemleri giderek karmaşıklaşabilir. Örneğin:

 ^\-{0,1}[0-9]{0, }\.{0,1}[0-9]{0, }$

PHP bu tür karmaşık ifadelerin hatasız yazılmasını sağlayan kısaltmalara sahiptir. Bunlar:

? {0,1} anlamına gelir. Kendisinden önce yer alan karakterin en az sıfır en çok bir kere tekrar edilmesi gerektiğini (olmayabileceğini ama olursa en fazla bir kere olabileceğini) belirtir.

* {0, } anlamına gelir. Kendisinden önce yer alan karakterin sıfır veya daha fazla kere tekrar edilmesi gerektiğini (tümüyle opsiyonel olduğunu) belirtir.

+ {1, } anlamına gelir. Kendisinden önce yer alan karakterin en az bir veya daha çok kere tekrar edilmesi gerektiğini (bulunmasının zorunlu olduğunu) belirtir.
Bu kısa-yolları kullanarak, yukarıdaki karmaşık ifadeleri basitleştirelim:

 ^\-?[0-9]*\.?[0-9]*$ 
 ^[a-zA-Z0-9_]+$ 
En az bir harf veya rakam veya altçizgi içeren herhangi bir kelime
 ^[0-9]+$   Herhangi bir pozitif tamsayı
 ^\-?[0-9]+$   Herhangi bir tamsayı
 ^\-?[0-9]*\.[0-9*$]+$   Herhangi bir kesirli (double) sayı

Bir düzenli ifadede bir veya bir başka kelime aranacaksa, birden fazla arama işaretini kullanabiliriz. Birden fazla kriter vermemize izin veren işaret, | işaretidir.

 \ali  |  \aliye

ifadesi ile, ya “ali” ya da “aliye” değerlerinin bulunmasını sağlayabiliriz.

PHP programlarımızda ziyaretçilerimizin girdiği bilgileri çeşitli bakımlardan test etmek mümkündür; ancak hiç bir zaman yazılanların doğruluğunu garanti edemeyiz. Özellikle bir metinde bulunmaması gereken işaretleri PHP’ye Düzenli İfade Fonksiyonları ile aratabiliriz.

Düzenli İfadelerde Kullanılabilecek Özel Karakterler

Düzenli ifadelerde hangi karakterler kullanılır ¿


Düzenli ifadelerde kullanılan bir çok karakter bu karakterleri bir word belgesi halinde sunmak istedim.Bunları ezberlemek zor olabilir.Döküman halinde elinizin altında bulunursa problem yaşamazsınız.

Düzenli İfadelerde Kullanılan Karakterler İNDİR

Eşleştirme Deyimler ve İşaretleri

Eşleştirme ifadelerinden ilki “şapka işareti” diye tabir ettiğimiz “^” dir. Örnek olarak bir şiir metni aldım ve bu şiir metninde eşleştirme ifadelerini deneyeceğiz.

Cumhuriyet tarihin okuyup okutalım // 1. SATIR
O günlerde savaşan şehitleri analım // 2. SATIR
Atatürk ulu önder, gönülde yaşatalım // 3. SATIR
Hep rehberlik edecek Atatürk ilkleri // 4. SATIR

Bu şiir içinde arama yapacağız şimdi.İlk düzenli ifademiz ^Atatürk.
Şapkadan sonra gelen kelime ile başlayan satırı bul demektir.^Atatürk kelimesi ile arama yaptığında 3. satırı bulacaktır. 4. satırdada Atatürk kelimesi geçmektedir ama Atatürk kelimesi ile başlamadığı için bulmaz.

Cumhuriyet tarihin okuyup okutalım
O günlerde savaşan şehitleri analım
Atatürk ulu önder, gönülde yaşatalım
Hep rehberlik edecek Atatürk ilkleri

Şimdide $ işareti ile arama yapalım.$ işaretinden önce yazılan kelime ile biten satırları bul demektir.
analım$ ifadesini kullandığımızda bize ikinci satırı gösterecektir.

Cumhuriyet tarihin okuyup okutalım
O günlerde savaşan şehitleri analım
Atatürk ulu önder, gönülde yaşatalım
Hep rehberlik edecek Atatürk ilkleri

Şimdide hem şapka işareti hemde $ işareti ile bir düzenli ifade kullanıp arama yapmayı deneyelim.
Arama cümlemiz şöyle olsun. ^Atatürk$ Bu ifade hem Atatürk ile başlayan hemde Atatürk ile biten satırları bulmamızı sağlar.Bizim şiirimizde bu ifade biçiminde herhangi bir sonuç olmadığı herhangi bir sonuç geri dönmez.

Bu seferde düzenli ifade karakterlerini kullanmadan bir arama yapalım ne dersiniz.Atatürk kelimesini tek başına aratalım.Bu arama biçimi ise içinde Atatürk geçen satırları bulacaktır.Cümlenin başında veya sonunda olmasının herhangi bir önemi yoktur.

Cumhuriyet tarihin okuyup okutalım
O günlerde savaşan şehitleri analım
Atatürk
ulu önder, gönülde yaşatalım
Hep rehberlik edecek Atatürk ilkleri