PHP de Metin Düzenleme İşlemleri - İsmail KIRBAŞ ile Web Sitesi Tasarımı
İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa] İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa] İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa]
 Site Haritası 
 
Site Map
Ana SayfaYeriniz | Ana Sayfa | Makaleler | Programcılık | PHP | PHP de Metin Düzenleme İşlemleri

Diğer Yazılar
Yapı Taşları
PHP de Dosya İşlemleri
Operatörler
Fonksiyonlar
Veri Aktarımı
Sekmeli Menü 1
Sekmeli Menü 2
Hızlı RSS Hazırlama
Web Formları İçin Güvenlik Kodu Oluşturma
PHP ye Giriş
PHP ye Giriş 2
Php ile COM Port Kontrolü
Kaya Sağlamlığında Kodlama


E-posta Gönderin Yorum Yazın
Güvenlik Kodu:1956Güvenlik Kodu:1956Güvenlik Kodu:1956Güvenlik Kodu:1956




En Son Okunan 10 Makale
  1. Yapı Taşları
  2. Büyük Fikirler Oluşturmanın 101 Yolu
  3. DTD Belirtme Zorunluluğu
  4. Web Sitesi İletişim Türleri
  5. Internette Görsel Kirlenme
  6. XHTML'e Giriş
  7. Sudoku Oyunu ve Çözüm Teknikleri İpuçları
  8. CE İşareti ve ISO Belgesi
  9. E-imza ve E-sertifika
  10. Bilgisayar Donanımı
 
PHP de Metin Düzenleme İşlemleri>
Yazı Tipi KüçültYazı Tipi BüyütAna SayfaYazıcıdan ÇıkarPDF Belgesi Olarak GörüntüleFavorilerime EkleArkadaşıma Tavsiye EdeceğimRTF (Word Dokümanı) olarak görüntüle

İçindekiler

PHP metin işleme konusunda atası Perl kadar marifetli bir dildir. Bilhassa formlardan gelen bilgilerin işlenmesi konusunda çok kullanacağımız 50'den fazla fonksiyona sahiptir.

Bu bölümde temel metin fonksiyonlarına ve bazı düzenli ifadelere değineceğiz. PHP'nin metin işleme fonksiyonlarının tam listesine http://www.php.net/ adresinden ulaşabilirsiniz.

Temel Metin Fonksiyonları

Metinsel (karaktersel, alfanümerik, string) ifadeler üzerinde bir bölümünü alma, atma, değiştirme gibi işlemler yapılabilir. Şimdi örneklerle birlikte bu işlemleri sağlayan temel fonksiyonlara değinelim.

Fonksiyon tanımlarındaki köşeli parantez " [ ] " içindeki ifadeler seçimlik parametreleri temsil etmektedir.

substr() Metnin bir bölümünü almak...
Bir string değişkenin değerinin ya da bir metnin tanımladığımız bölümünü verir. İkisi zorunlu, biri seçmeli üç parametre alır. İlk parametre: üzerinde işlem yapılacak metinsel değer içeren değişkeni yada metnin kendisini, ikinci parametre: bu metnin kaçıncı karakterinden itibaren işlem yapılacağını, üçüncü parametre : başlangıc konumundan itibaren kaç karakter alınacağını ifade eder. Üçüncü parametre seçimliktir ve bildirilmezse başlangıç konumundan itibaren verilen metnin sonuna kadar olan kısmı alınır.

Genel yazım şekli:

substr($degisken, baslangic_konumu [, alinacak_karakter_sayisi ]);

Örnek:

<?
$cumle
="Biz bu Kostarika'yı yeriz :)";
$secilen=substr($cumle,7);    // 7.karakterden sonraki tüm bölümü alır
print $secilen;      // Kostarika'yı yeriz :)

print "<br>";

$secilen=substr($cumle,7,9); // 7.karakterden sonraki 9 karakteri alır.
print $secilen;      // Kostarika
?>

Başlangıç değeri olarak negatif bir sayı verirsek seçim işlemine metnin sonundan itibaren başlanır.

Örnek:

<?
$cumle
="Biz bu Kostarika'yı yeriz :)";
$secilen=substr($cumle,-8);    // Sondan 8.karakterden sonraki tüm bölümü alır
print $secilen;      // yeriz :)
?>

trim() Metnin baş ve sonundaki boşluklarını kırpmak..
Parametre olarak aldığı metnin baş ve sonundaki boşlukları atar. Bu fonksiyon metnin başındaki yada sonundaki "n", "r", "t","v","v","o" ve aralık işaretlerini de boşluk sayar.

Genel yazım şekli:

trim($degisken);

Örnek:

<?
$cumle
="  tBiz bu Kostarika'yı yeriz :) n"
$temiz=trim($cumle);
    
// Metnin başındaki boşluklar ve tab karakteri, sonundaki yeni satır karakteri temizlenecektir.
?>

chr() ASCII'dan karaktere...
Parametre olarak ASCII değeri bildirilen karakteri değer olarak döndürür;

Örnek:

print chr(45);   //Ekrana A yazar

ord() Karakterden ASCII'ya...
Parametre olarak bildirilen karakterin ASCII karşılığını değer olarak döndürür;

Örnek:

print ord("A");   //Ekrana 65 yazar

strlen() Metnin uzunluğu...
Parametre olarak aldığı metnin kaç karakter içerdiğini bildirir.

Genel yazım şekli:

strlen($degisken);

Örnek:

<?
if (strlen($parola)>8)     //girilen değer 8 karakterden uzun ise
{
    print 
"Lütfen 8 karakterden uzun yazmayınız. ";
}
?>

number_format() Sayıları basamaklamak...
Sayı türündeki değişken değerlerini bin basamaklı şeklinde biçimlendirmek için kullanılır. Parametre olarak sayı içeren değişkeni (ya da sayının kendisini), ondalık bölümün kaç haneli olacağını, ondalık haneyi ayırmak için kullanılacak karakteri, binler basamaklarını ayırmak için kullanılacak karakteri kabul eder.

Ayırma karakterlerini ifade eden parametreler seçimliktir. Bu parametreler belirtilmediğinde ondalık kısım görüntülenmez, sayı yuvarlanarak tam sayı haline getirilir ve binler basamaklarının ayırımında virgül (,) kullanılır.

Örnek:

<?
$sayi
=123123456.789123;
print 
number_format($sayi);
    
//  123,123,457

print "<br>";

print 
number_format($sayi,2,".",",");
    
//  123,123,456.79

$sayi=123456789;
print 
number_format($sayi,2,".",",");
    
//  123,456,789.00
?>

Farkettiyseniz number_format() fonksiyonunu ondalık değer gösterecek şekilde kullanıldığında girilen sayı tamsayı bile olsa .00 olarak ondalık değer belirtiyor. Bir uygulamada şahsen bu durumu pek sevmemiş ve aşağıdaki gibi bir fonksiyon yazarak number_format()'ı doğrudan kullanmak yerine bu fonksiyonu kullanmıştım. Fonksiyon, girilen sayının içeriğine göre (türüne göre değil, neden değil? az sonra) ya number format()'ı ondalıklı haliyle koşuyor, yada normal olarak (ondalık parametreleri olmaksızın) koşuyordu. Girilen sayının türüne değil de içeriğine göre bakmasının nedeni de şu: sayının içeriğinde "." ifadesi olup olmadığına bakmak sayının is_integer() ile tamsayı olup olmadığına bakmaktan daha doğru cevap veriyordu zira integer sayılar belli bir değerden (2147483647) yukarısı için geçerli değildi. Türkiye'de bu sayının yetmeyeceği aşikar olduğundan ileride daha büyük sayılar da kullanıldığında doğru cevap versin diye bu yolu kullanmıştım.

<?
function NumberFormat($number)
{
    if (
ereg(".",$number))      // number'in içerisinde . işareti var mı?
                            //Düzenli ifadeler konusunda incelenecek...
        
return number_format($number,2);
    else
        return 
number_format($number);
}

$sayi=21474838649;

print 
NumberFormat($sayi);     // 21,474,838,649
print "<br>";

$sayi=21474838649.123456;

print 
NumberFormat($sayi);     // 21,474,838,649.12
print "<br>";

?>

Sayfa başına geri dön..

Tarih Ve Saat Fonksiyonları

PHP'de tarih ve zaman bilgisini çok esnek bir biçimde kullanabilmemize izin veren önemli fonksiyonlar vardır: getdate(), date(), time() ve mktime() .

getdate()
Bu fonksiyon çalıştırıldığında geriye bir dizi döndürür. Bu dizinin elemanlarını kullanarak o anki tarih ve zaman bilgisini programımıza rahatlıkla aktarabiliriz. Fonksiyon o anki zaman bilgisi ile ilgileniliyorsa parametresiz kullanılabilir. Ama geçmiş veya gelecekteki bir tarih için Unix Epoch biçiminde, ilgilenilen zamanı temsil eden bir parametre almalıdır.

Unix Epoch biçiminde zaman bilgisini elde etmek için kullanılan fonksiyonlar bu konuda anlatılacaktır.

getdate() fonksiyonun döndürdüğü dizinin indisleri ve değerleri:
"seconds"   - saniye
"minutes"   - dakika
"hours"     - saat
"mday"      - ayın kaçıncı günü olduğu bilgisi (1,2,3,... 31)
"wday"      - haftanın kaçıncı günü olduğu bilgisi (Pazar: 0, P.Tesi: 1,... C.tesi: 6 )
"mon"       - ay (1,2,...12)
"year"      - yıl (2001,2002,...)
"yday"      - yılın kaçıncı günü olduğu bilgisi (1,2,3,...365)
"weekday"   - haftanın hangi günü olduğu bilgisi (Sunday, Monday,... Saturday)
"month"     - ay (January,February,...December)
                  
Örnek:

<?
$tarih
=getdate();

print 
$tarih[mday]."-".$tarih[mon]."-".$tarih[year];
    
//25-6-2002
?>

date()
Bu fonksiyon parametre olarak özel biçimlendirme ifadeleri alır. Genel kullanım şekli:

date("bicimlendirme parametreleri");

Özel biçimlendirme parametrelerinden en çok kullanılanları:
a   12 saat esasına daynan Anglo-Sakson sistemlerinde öğleden 
önce ("am") veya öğleden sonra ("pm") işaretini sağlar.
A   Aynı işaretlerinin büyük harfle yazılmasını sağlar.
d   İki haneli gü sayısı, tek haneli günlerin önüne sıfır konur: "01"-"31"
D   Üç haneli gün adı kısaltması: "Sun","Mon", ..
F   Uzun ay adı: "January","February", ..
h   12 saatlik sistemde saat: "01"-"12"
H   24 saatlik sistemde saat: "00"-"23"
g   12 saatlik sistemde tek haneli saatlerin önüne sıfır konmadan saat: "1"-"12"
G   24 saatlik sistemde tek haneli saatlerin önüne sıfır konmadan saat: "0"-"23"
i   Dakika: "00-59"
j   Tek haneli sayıların önüne sıfır konmadan gün sayısı: "1"-"31"
l   (Küçük l harfi) Uzun gün adı: "Sunday", "Monday", ..
L   Artık yıl olup olmadığına ilişkin Boolean (doğru/yanlış) değişken.
    Artık yıl ise 1 değilse 0 döndürür.
m   Tek haneli sayıların önüne sıfır konarak ay sayısı: "01"-"12"
n   Tek haneli sayıların önüne sıfır konmadan ay sayısı: "1"-"12"
M   Kısaltılmış ay adı: "Jan","Feb", ..
s   Saniye: "00"-"59"
S   İngilizce "'nci" anlamında 2 karakter ek: "th","nd"
t   Belirtilen ayın toplam gün sayısı: "28"-"31"
w   Haftanın kaçıncı günü olduğu bilgisi: "0" Pazar, "6" Cumartesi
Y   Dört haneli yıl: "2000"
y   İki haneli yıl "02"
z   Yılın kaçıncı günü olduğu bilgisi: "0"-"365"

                  
Örnek:

<?
print "Tarih: ".date("d-m-Y");
   
// Tarih: 25-06-2002
?>

Normalde date() fonksiyonunun içine "-" işaretinde olduğu gibi yazılması üzere başka metinler de girebilirsiniz. Ama pek çok harfe özel bir anlam yüklendiği için bu tür girişimler başarılı bir çıktı vermeyecektir. Mesela yukardaki örnekteki "Tarih" ifadesini date()'in içine ekleyemedik. Çünkü T, a, r, i ve h harflerinin hepsinin fonksiyon için ayrı bir anlamı var.

date() fonksiyonu, seçimlik olarak ikinci bir parametre alır. Bu parametre Unix Epoch biçiminde zaman bilgisi içermelidir. Böylece date() fonksiyonu o anki zaman göre değil belirtilen zamana göre çıktı üretecektir.

time()
Bu fonksiyon parametresiz çalışır ve Unix Epoch biçiminde o anki zaman bilgisini içeren bir tamsayı değer döndürür. Hatırlarsanız PHP'ye Veri Aktarımı konusunda ele alınan çerez (cookie)'lerde çerezin ömrünü belirtmek için bu fonksiyonu kullanıyorduk.

time() fonksiyonuna saniye cinsinden değer ekleyip çıkartarak geçmiş ve gelecek tarihlere ait Unix Epoch biçiminde değer elde edebilir, bu değeri date(), getdate() gibi fonksiyonlarda kullanabiliriz.

Örnek:

<?
$bugun
=getdate();
print 
$bugun[mday]."-".$bugun[mon]."-".$bugun[year];
    
// 25-6-2002
print "<br>";

print 
date("d-m-Y");
    
// 25-6-2002
print "<br>";

$bugun=getdate(time());
print 
$bugun[mday]."-".$bugun[mon]."-".$bugun[year];
    
// 25-6-2002
print "<br>";

print 
date("d-m-Y",time());
    
// 25-6-2002
print "<br>";

$dun=getdate(time()-24*60*60);
print 
$dun[mday]."-".$dun[mon]."-".$dun[year];
    
// 24-6-2002
print "<br>";

print 
date("d-m-Y",time()-24*60*60);
    
// 24-6-2002
print "<br>";

$yarin=getdate(time()+24*60*60);
print 
$yarin[mday]."-".$yarin[mon]."-".$yarin[year];
    
//26-6-2002
print "<br>";

print 
date("d-m-Y",time()+24*60*60);
    
// 26-6-2002
?>

mktime()
Bu fonksiyon parametre olarak aldığı zaman bilgilerine (saat, dakika, saniye, ay, gün, yıl) göre Unix Epoch biçiminde bir değer üretir. Parametresiz kullanıldığında o anki zaman için değer döndürür. time() fonksiyonunda sadece saniye cinsinden zaman üzerinde ileri geri oynanabildiği için mktime() fonksiyonu bu yönden daha kullanışlıdır.

Örnek:

<?
// Bundan bir gün iki ay üç yıl önce'sine yolculuk yapalım..
$zaman=mktime(0,0,0,date("m")-1,date("d")-2,date("Y")-3);
print 
"Dün: ".date("d-m-Y",$zaman);
    
//  23-05-1999;
?>

Sayfa başına geri dön..

Düzenli İfadeler

Dr. Hakkı Öcal'ın ifadesi ile UNIX İşletim Sistemini geliştirenlerin bilişim teknolojisine kazandırdığı paha biçilemez araçlardan biridir Düzenli İfadeler (Regular Expressions). Bu ifadeler sayesinde metinler içerisinde özel bir karakter dizilişini aratabilir, değiştirebilir ya da silebiliriz.

Bu alt başlık içerisinde düzenli ifadelerin nasıl oluşturulacağını örneklerle ifade etmeye çalışalım. Bu ifadelere ait fonksiyonlara da bir alt başlıkta değinelim..

^Bu

"Bu" ile başlayan bütün kelimeleri bulur. ^ işareti, "verilen karaktersel değer içeren değişkenin yada metnin başında arama yapılacağı" anlamına gelir. Yani bu örnek ile "Bu gün hava çok güzeldi" yada "Bulutlar ne kadar hızlı hareket ediyor.." cümlesi bulunabilir. Ancak "Herkes bu günü sabırsızlıkla bekliyordu..." cümlesi bulunamayacaktır.

güzeldi$

"güzeldi" ile sonlanan bütün kelimeleri bulur. "Bu gün hava çok güzeldi" cümlesi bu ifade ile bulunabilir ama mesela cümlenin sonunda bir de nokta işareti (.) olsaydı eşleşme olmayacaktı.

^bu$

Bu ifade ile sadece ve sadece "bu" kelimesini içeren değişkenler yada metinler bulunabilir. Yukarıdaki cümlelerden hiç biri bu ifade ile bulunamayacaktır.

bu

İçinde "bu" gecen tüm tüm metinleri bulur. Yukarıdaki cümlelerin hepsi bu ifade ile bulunabilir.

Düzenli ifadelerde özel karakterler (tab, boşluk vb.) ve noktalama işaretleri (".", "," vb. ) önlerine ters bölü () işareti alarak kullanılmalıdır. Bunun dışında Düzenli İfadeler arama işlemlerinde kolaylık sağlayacak bazı özel karakterler de sunar. Bu ifadelerden bazıları:

t  Tab Karakteri
r  Enter (Satır başı) Karakteri
n  Yeni satır karakteri
s  Boşluk karakteri
  Ters bölü karakterinin kendisi

d  0'dan 9'a herhangi bir rakam
w  Herhangi bir harf, rakam ya da alt çizgi
W  Harf, rakam ya da alt çizgi dışındaki karakterler
                  

Karakter Grupları
Düzenli ifadelerde aramaları kolaylaştırmak için karakter grupları oluşturabiliriz. Karakter grupları köşeli parantez "[ ]" içinde yazılır. Örneğin içinde "a","e", ve "i" geçen kelimeleri buldurmak için:

[aei]

dememiz yeterlidir. Köşeli parantezler olmasaydı, "aei" diye bir kelimenin verilen metinde geçip geçmediğine bakılacaktı. Aşağıda belli başlı bazı grupların listesi ve çeşitli örnekler bulunmaktadır.

[]                  Hiç bir karakter
[a-z]               Herhangi bir küçük harf
[A-Z]               Herhangi bir büyük harf
[a-zA-Z]            Herhangi bir büyük veya küçük harf
[0-9]               Herhangi bir rakam
[0-9.-]           Herhangi bir rakam veya nokta işareti ve ya kesme (tire) işareti
[trns]          Herhangi bir sekme (Tab), satır başı (Enter), 
					 yeni satır (New Line) veya boşluk (Space) karakteri

^[a-z][0-9]$        Küçük harfle başlayan ve rakamla sonlanan iki karakterli bir kelime
                    Grubun başı ve sonu belirlendiğinden sadece iki 
					 karakterli kelimeler aranacaktır
                  

^ işareti köşeli parantez içinde kullanıldığında olumsuzluk anlamı taşır.

^[^0-9][0-9]$       İlk karakteri rakam olmayan ancak rakamla sonlanan 
iki karakterli bir kelime
[^a-z]              Küçük harf olmayan herhangi bir harf
[^A-Z]              Büyük harf olmayan herhangi bir harf
[^/^]           , / veya ^ dışında herhangi bir müzik
[^"']             Çift ve tek tırnak dışında herhangi bir karakteri bulur.
                  
Grup oluşturmada kullandığımız özel karakterler de vardır. Nokta (.) işareti, yeni satır başlangıcı olmayan herhangi bir karakter anlamına gelir.

PHP'nin hazır düzenli ifade grupları da vardır. Bunlardan bazıları:

[[:alpha:]]         Herhangi bir harf
[[:digit:]]         Herhangi bir rakam
[[:alnum:]]         Herhangi bir harf veya rakam
[[:space:]]         Herhangi bir boş karakter
[[:upper:]]         Herhangi bir büyük harf
[[:lower:]]         Herhangi bir küçük harf
[[:punc:]]          Herhangi bir noktalama işareti
                  

Düzenli ifadeleri belirtirken tekrar eden karakter sayısını belirtebiliriz. Bunun için süslü parantez ({}) kullanırız.

^a{4}$              İçinde sadece 4 adet küçük a harfi bulunan kelimeler: aaaa
^a{2,4}$            İçinde sadece iki, üç veya dört adet küçük a harfi bulunan kelimeler: 
					 aa, aaa veya aaaa
^a{2,}              Başında iki yada daha çok a harfi bulunan kelimeler: aabcdef, 
					 aaabcdefg, aaaabcdefg gibi
t{2}               Ardarda iki sekme işareti içeren metinler
.{2}                Herhangi çift karakter içeren metinler: aa, &&, == gibi
                  

Düzenli ifadelerde hatasız ve daha sade seçimler yazılabilmesi için PHP'de çeşitli kısayollar tanımlanmıştır.

?       {0,1} anlamına gelir. Kendisinden önce yer alan unsurun 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 gelen unsurun sıfır yada daha 
		 fazla kere tekrar edilmesi gerektiğini
        (tamamen seçimlik olduğunu) belirtir.


+       {1,} anlamına gelir. Kendisinden önce gelen unsurun en az bir yada 
		 daha çok kere tekrar edilmesi gerektiğini
        (bulunmasının zorunlu olduğunu) belirtir.


^[a-zA-Z0-9_]+$     En az bir harf, rakam veya alt çizgi içeren herhangi bir kelime
^[0-9]+$            Herhangi bir pozitif tamsayı
^-?[0-9]+$         Herhangi bir tamsayı
                  

Bir düzenli ifadenin yazılışında birden fazla arama / sıralama deyimine yer verebiliriz. Bunun için boru (pipe) ( | ) karakteri kullanılır. Pipe karakteri veya gibi davranacaktır.

.com|.net             ".com" yada ".net" içeren kelimeler

^.+@.+..+$             Email adresi biçimine uyan kelimeler
    ^                   Başında
    .+ yani .{1,}       yeni satır karakteri dışında bir karakteri en az bir kere içeren,
    @                   bir tane @ karakteri içeren,
    .+ yani .{1,}       yeni satır karakteri dışında bir karakteri en az bir kere içeren,
    .                  bir tane nokta (.) karakteri içeren
    .+$ yani .{1,}$     sonunda yeni satır karakteri dışında bir karakteri en az 
						 bir kere içeren.

                        Örnek: hcivelek@kuzen.net
                  
Sayfa başına geri dön..

Düzenli İfade Fonksiyonları

PHP'de düzenli ifadeleri kullanıp metinler üzerinde arama, değiştirme, silme gibi işlemler yapabileceğimiz bazı fonksiyonlar tanımlanmıştır. Bunlardan çok kullanılanları üzerinde duralım.

ereg() ve eregi()
ereg() fonksiyonu ikisi zorunlu biri seçimlik üç parametre alır. İlk parametrede aramada kullanılacak düzenli ifade değeri, ikinci parametrede eşleşmenin yapılacağı metin veya metni ifade eden değişken belirtilir. Fonksiyon, üçüncü parametre olarak bir dizi-değişken ismi alır. Bu sayede eşleşme yapılacak düzenli ifadeler gruplar halinde verildiğinde eşleşmeye uyan her değer üçüncü parametre olarak verilen diziye kaydedilecektir. Hemen hatırlatalım, üçüncü parametrede biriktirilmek üzere oluşturulacak gruplar maksimum 10 tane olabilmektedir.

ereg() fonksiyonu eşleşme olduğu durumda TRUE, aksi halde FALSE değeri döndürecektir. ereg() ile eregi() fonksiyonları aynı mantıkla çalışır ancak eregi() fonksiyonu büyük küçük harf ayrımı yapmaz.

Genel yazım şekli:

ereg(eslenecek_düzenli_ifade, icinde_arama_yapilacak_metin [, eslenen_düzenli_ifade_gruplari])

Aşağıdaki örnekleri inceleyim.

Örnek:

<?
$metin
="Bugün hava çok güzel";

if (
eregi("hava",$metin))
    print 
"Havadan sudan mı bahsedeceğiz?."
?>

Yukarıdaki örnekte $metin değişkeni içerisinde "hava" ifadesinin olup olmadığı araştırılır. Eşleşme olması halinde eregi() ifadesi TRUE döndürür ve bu sayede print() fonksiyonu işleme konur.

Örnek:

<?
if (!eregi('^.+@.+..+$',$email))
    print 
"Email'inizde hata var."
?>

Bu örnekte eregi() fonksiyonunun başındaki ünlem (!) işareti sayesinde $email değişkeninin düzenli ifade ile belirtilen eşleşmeye uymaması halinde TRUE dönecektir ve print() fonksiyonu işleme konacaktır.

Örnek:

<?
$metin
="Bugün hava çok güzel ama keşke biraz rüzgar esse.";
eregi("(hava).+(bir)",$metin,$eslenenler);

print 
"<pre>";
print_r($eslenenler);
print 
"</pre>";
?>

Bu örnekte eregi() fonksiyonuna üçüncü parametre olarak $eslenenler değişkeni verilmiştir. Diğer örneklerden farklı olarak düzenli ifade içerisinde parantezli ifadeler vardır. Bu, "parantezli ifadelerde belirtilen eşleşme gruplarına uyan değer bulunursa bu değerleri $eslenenler dizisine kaydet" anlamına gelmektedir. İfadenin kendisi de bir düzenli ifade olduğu için $eslenenler dizisinde 0. eleman bu ifadeye uyan değer olacaktır. Yukarıda da değinildiği üzere parantez içerisindeki gruplar en çok 10 tane olabilmektedir.

Yukarıdaki kodun çıktısı şu şekilde olacaktır.

Array
(
    [0] => hava çok güzel ama keşke bir
    [1] => hava
    [2] => bir
    [3] => 
    [4] => 
    [5] => 
    [6] => 
    [7] => 
    [8] => 
    [9] => 
)
                  

Bu örnekte geçen print_r() fonksiyonu parametre olarak aldığı dizi değişkeninin içeriğini ekrana basmaktadır.

ereg_replace() ve eregi_replace()
Arattığımız düzenli ifadenin verilen metinde eşleşmesi halinde bu değeri başka bir değerle değiştirmek için ereg_replace() veya eregi_replace() fonksiyonları kullanılır. Aralarındaki fark ereg()-eregi()' de olduğu gibi büyük küçük harf ayrımıdır.

Genel yazım şekli:

ereg_replace(eslenecek_düzenli_ifade, yerine_konacak_deger, arama_yapilacak_metin)

ereg_replace ve eregi_replace() fonksiyonları sadece eşleşen değeri başka bir değere değiştirmekle kalmaz. Eşleşen ifadenin yerine konacak değerde eşleşen ifadenin eski halini de kullamamıza izin verir. Yani "eşleşen ifadeyi yeni ifade ile değiştir" işleminin yanı sıra "eşlenen ifadeyi, eşlenen ifadeye birşeyler ekleyerek değiştir" işlemini de yapar.

Bu son bahsettiğimiz özelliği kullanmak için birinci parametre olarak verilen düzenli ifadenin ereg() fonksiyonunda olduğu gibi parantezlerle gruplanması gerekir. Eğer birden fazla grup oluşturulmayacaksa parantezli ifadeye gerek yoktur. Eşlenen ifadeleri, değiştirilecek yeni değerin içinde , 1 .. ifadeleri ile kullanılırız.

İşlemler çok karıştı diyorsanız hemen örneklere geçelim.

Eğer verilen düzenli ifadeye eşleşen kelimeleri değilde doğrudan bir kelimeyi başka bir kelime ile değiştirmek istiyorsanız benzer parametreler ile str_replace() fonksiyonunu da kullanabilirsiniz..

Örnek:

<?
$metin
="Bugün nedense hep yalnış yazıyorum.";
$metin=ereg_replace("yalnış","yanlış",$metin);
// metin içindeki "yalnış" kelimesi düzeltilip "yanlış" olarak değiştirilir..

print $metin;

?>

Örnek:

<?
$metin
="Farzedelim ki bu metin bir HTML formundan gelen bilgiler içermektedir. Ve bu bilgileri
ziyaretçi defterimizde görüntüleyeceğiz.
Kötü niyetli kişiler bu alana HTML kod yazarak programcı tarafından istenmeyen durumlara
yol açabilir. Mesela ben yazıyorum işte..
<a href="
Javascript:alert('HEBELEEE HÜBELEE :)')">Buraya tıkla 100 milyon kazan</a> falan filan.. ";

$metin=ereg_replace("[<>]","",$metin);

print 
$metin;

// Bu kod ile "<" veya ">" karakterlerini "" (boşluk) ile değiştirmiş olduk.

?>

Örnek:

Bir forum yazdığımızı düşünelim ve ziyaretçilerin girdiği yorumların arasında http://web.sayfasi.adresi, email@email.adresi, ftp://ftp.adresi gibi ifadeleri ekrana basmadan önce gerçek birer bağlantı haline getirelim. Hatta gerekli her yerde kullanmak üzere bunu bir fonksiyon haline getirelim.

Bildiğiniz gibi http ve ftp adresleri benzer yapıda yazılırlar. Ancak email adresleri öyle değildir. Genelde doğrudan email@email.adresi şeklinde yazılırlar. Fakat bağlantı yaparken kullanılan yöntemler hemen hemen aynıdır. Sadece bağlantı protokol türü birinde http://, diğerinde mailto:// en sonuncusunda da ftp://'dir. O halde işimizi kolaylaştırması için yapmamız gereken birinci işlem metnin içerisinde email adresinin geçip geçmediğini öğrenmek ve varsa adresin başına "mailto://" ibaresi eklemek. Ondan sonra kodda da göreceğimiz gibi işimiz kolaylaşacaktır.

<?
// ereg_replace fonksiyonlarındaki ifadesi "eşleşen değer" anlamındadır.

function BaglantiliYaz($mesaj)
{
    
$mesaj=ereg_replace("[^[:space:]<>]{1,}@[^[:space:]<>]{1,}.[^[:space:]<>]{1,}","mailto://",$mesaj);
    
// metin içerisindeki "email@email.adresi" gibi bir ifadeler "mailto://email@email.adresi"'e dönüştürülüyor..

    
return ereg_replace('((http|ftp|mailto)://[^[:space:]<>]{1,})'," <a target="new" href=""></a>",$mesaj);
    
// http://, mailto:// ftp:// gibi ifadeler bağlantı haline dönüştürülüyor..
}

$metin="[ÖRNEKTİR!!!] Merhaba, bir şey söylemek istiyorum: http://www.kuzen.net adresinde DatabaseGrid adında
bir PHP classı varmış. Class'ı ftp://ftp.kuzen.net adresinden çekebilirsiniz..
Görüşlerinizi lütfen hcivelek@kuzen.net adresine bildirin.. [ÖRNEKTİR!!!]"
;

print 
nl2br(BaglantiliYaz($metin));
    
// nl2br() fonksiyonu, ziyaretçinin girdiği Enter (Yeni Satır) karakterini <br> etiketine çevirir.

?>

Bu kodun çıktısı:

[ÖRNEKTİR!!!] Merhaba, bir şey söylemek istiyorum: http://www.kuzen.net/ adresinde DatabaseGrid adında
bir PHP classı varmış. Class'ı ftp://ftp.kuzen.net/ adresinden çekebilirsiniz..
Görüşlerinizi lütfen mailto://hcivelek@kuzen.net adresine bildirin.. [ÖRNEKTİR!!!]

split()
Bu fonksiyon, düzenli ifade olarak verilen değeri metni parçalara ayırmak için kullanır. Yani düzenli ifadeye uyan kısımlarından metni parçalar ve bir diziye kaydeder. Genel yazım şekli:

$yeni_dizi=split("eşleştirilecek_sira", $arama_yapılacak_metin [, sınır_sayısı]);

Fonksiyonun 3. parametresi seçimliktir ve oluşturulacak yeni diziye en fazla kaç eleman yazılmasını belirtmek için kullanılır. Belirtilmezse yeni diziye gerektiği kadar eleman konulacaktır.

Örnek:

<?
$metin
="Bir berber bir berbere bre berber demiş.";
$parcalar=split(" ",$metin);
    
// Metni, boşluklardan ayırdık.

print "<pre>";
print_r ($parcalar);
print 
"</pre>";

/*
Array
(
    [0] => Bir
    [1] => berber
    [2] => bir
    [3] => berbere
    [4] => bre
    [5] => berber
    [6] => demiş.
)
*/
?>



Not: Yazılar konusundaki yorumlarınız için lütfen Yorum Yazın bölümümüzü kullanın.

Yazar : Hasan Civelek
Son Güncelleme : 14 Mayıs 2005, Cumartesi
Sayfa Sürümü : 1
Okunma Adedi : 11,934
Son Okunma : 2017-12-13 11:47:03
Kaynaklar : http://www.bthayat.net/site/yazi_goster.php?id=188

PHP de Dosya İşlemleriPHP de Metin Düzenleme İşlemleriOperatörler
© [Site Haritası]
| Makaleler | Seyir Defteri | Kaynaklar | İndirin | İletişim |

RSS dosyasını görmek için tıklayınız. RSS dosyasını görmek için tıklayınız.XML versiyonu için tıklayınız WAP versiyonu için tıklayınız Bu site DyNA İçerik Yönetim Sistemi üzerinde çalışmaktadır.
İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa
ismail kırbaş ile web sitesi tasarimi sitemap ismail kırbaş ile web sitesi tasarimi sitemap
  Sitemizde 5 kişi çevirimiçi | Bugün =25 | Dün =289 | Bu Ay=2,476 | Günlük En Fazla=1,109 tekil ziyaretçi