PHP – Metinler ve Düzenli İfadeler
description
Transcript of PHP – Metinler ve Düzenli İfadeler
1
PHP – Metinler ve Düzenli İfadeler
Internet Tabanlı ProgramlamaDr. Erman Yukselturk
2
function buldum($filename,$isim,$email,&$bulundu){$ara=fopen($filename,"r");while (!feof ($ara)) {
$satir=fgets($ara ,4096);$dataarray=split(',',$satir);
if(($dataarray[1]==$isim) && ($dataarray[2]==$email)){$bulundu=true;
fclose($ara);return $dataarray;
}}}
3
Normal İfadeler / Köşeli ParantezlerKöşeli parantezler [] eşleştirilmek istenen bir liste
veya aralığı ifade ederler.
[0-9] ifadesi 0’dan 9’a kadar olan sayısal değerleri ifade ederler.
[a-z] ifadesi a’dan z’ye kadar olan küçük harfleri ifade ederler.
[A-Z] ifadesi A’dan Z’ye kadar olan büyük harfleri ifade ederler.
[a-zA-Z0-9] ifadesi 0’dan 9’a, a’dan z’ye küçük harfleri ve A’dan Z’ye büyük harfleri ifade ederler.
4
Normal İfadeler / Miktarlar p+ en azından bir tane p içeren metinler p* hiç veya birden fazla p içeren metinler. p? hiç veya 1 tane p içeren metinler. p{2} ardışık 2 tane p içeren metinler. p{2,3} ardışık 2 veya 3 tane p içeren metinler. p{2,} ardışık en az 2 tane p içeren metinler. p$ en son karakteri p olan metinler ^p başında p olan bütün metinler [^a-zA-Z] a’dan z’ye veya A’dan Z’ye bir karakter
bulundurmayan metinler p.p ile başlayıp başka bir karakter ile devam eden
ve sonra tekrar p içeren metinler
5
Normal İfadeler / Miktarlar ^.{2}$ 2 karakter uzunluğunda olan
metinler <b>(.*)</b> <b> ve </b> arasında kalan
bütün metinler p(hp)* içerinde p olan ve bu p’yi takip
eden 0 veya birden çok ph içeren bütün metinler.
Özel karakterleri arattırmak için önüne \ işareti koyabilirsiniz. ([\$])([0-9]+) bu $ işareti ile başlayıp bir veya daha fazla rakam içeren değerler
6
Normal İfadeler / Önceden Belirlenmiş [:alpha:]: küçük ve büyük harfler veya [A-Za-z]. [:alnum:]: küçük , büyük harfler ve sayılar veya [A-Za-
z0-9]. [:cntrl:]: Kontrol karakterleri tab, escape, or backspace. [:digit:]: rakamlar 0’dan 9’a veya [0-9]. [:graph:]: ASCII tablosunda 3’den 126’ya yazılabilen
karakterler. [:lower:]: küçük harfler veya [a-z]. [:punct:]: noktalama işaretleri ~ ` ! @ # $ % ^ & * ( ) -
_ + = { } [ ] : ; ' < > , . ? ve /. [:upper:]: büyük harfler [A-Z]. [:space:]: boşluk karakterleri boşluk, yatay tab, dikey
tab, yeni satır vs… [:xdigit:]: Hexadecimal karakterler veya [a-fA-F0-9].
7
PHP’de tanımlı ifade fonksiyonları$kullaniciIsmi = "Ercan";
if (ereg("([^a-z])", $kullaniciIsmi))
echo "kullanici ismi kucuk harflerden olusmalidir!";
else
echo "Butun karakterler kucuk harflerden olusuyor.";
IP if (ereg('^([0-9]{1,3}\.){3}[0-9]{1,3}$',$var))
URL:if (ereg("^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu)$",$var))
Telefon numarası
"^(\()?([0-9]{3})(\))?( )?([0-9]{3})( )?(\-)?( )?([0-9]{4})$";
8
PHP’de tanımlı ifade fonksiyonları
$url = "http://www.ibu.edu.tr";
ereg("^(http://www)\.([[:alnum:]]+)\.([[:alnum:]]+)\.([[:alnum:]]+)", $url, $dizi);
echo $dizi[0]."<br>";
echo $dizi[1]."<br>";
echo $dizi[2]."<br>";
echo $dizi[3]."<br>";
echo $dizi[4];
9
PHP’de tanımlı ifade fonksiyonları$string="Abant İzzet Baysal Üniversitesi";
if (eregi("ü", $string)) {
echo "'$string' metininde ü veya Ü harfi bulunur!";}
$string="Abant İzzet Baysal Üniversitesi";
if (ereg("ü", $string)) {
echo "'$string' metininde ü veya Ü harfi bulunur!";}
$pswd = "ercanphp";
if (!eregi("^[a-zA-Z0-9]{8,10}$", $pswd))
echo "Gecersiz sifre!";
else
echo "Gecerli sifre!";
10
PHP’de tanımlı ifade fonksiyonları
$string = "Tubitak linki http://www.tubitak.org/.";
echo ereg_replace("http://([a-zA-Z0-9./-]+)$", "<a href=\"\\0\">\\0</a>", $string);
$string = "This is a test";
echo ereg_replace("( )is", “was", $string);
$string = "Dershanede yapilan ilk Quiz sonuclari ";
echo eregi_replace("( )quiz", "vize", $string);
11
PHP’de tanımlı ifade fonksiyonları$tarih = "30.04.1973";
list($gun, $ay, $yil) = split("\.", $tarih);
echo "Gün: $gun <br> Ay: $ay<br> Yıl: $yil<br />\n";
$cumle = "Ben Abant İzzet Baysal Universitesinde okuyorum";
print_r(split(" ",$cumle));
//Array ( [0] => Ben [1] => Abant [2] => İzzet [3] => Baysal [4] => Universitesinde [5] => okuyorum )
Spliti (küçük büyük harfe duyarlı değil)
$versiyon = "php 4.0";
echo sql_regcase($versiyon); //[Pp][Hh][Pp] 4.0
12
Perl’de tanımlı ifade fonksiyonları
/food/
/fo+/ (food, fool, fo4, foolish, …)
/fo{2,4}/ (fool, foool, foolish, football, …)
13
Perl’de tanımlı ifade fonksiyonları
Niteleyiciler (Modifier)
i küçük büyük harfe duyarsız arama yapar
g bütün uygulamalarını bulur
m metin’e birden çok satırmış gibi davranır. ^ ve $ karakterleri en baştaki ve en sondaki karakterlere karşılık gelir.
s metine bir satırmış gibi davranır. Yeni satır karakterlerini görmezden gelir. m niteleyicisinin tam karşıtıdır.
x boşlukları yok sayar
U ilk eşleşmede durur.
14
Perl’de tanımlı ifade fonksiyonlarıDeğişim karakterleri (Metacharacter)
\A: sadece metinin en başındaki eşleşmeyi yapar.
\b: sınırdaki kelimeyi eşleştirir.
\B: herhangi bir sınırdaki eşleşmeyi yapar.
\d: rakam eşleşmesini yapar, [0-9] ile aynı işlevi görür.
\D: rakam haricindeki herhangi bir eşleşmeyi yapar.
\s: sadece boşluk eşleştirmelerini yapar.
\S: boşluk haricindeki eşleşmeleri yapar.
[]: karakter grubunu kapsar.
(): karakter grubunu kapsar veya önceki bir referansı tanımlar.
15
Perl’de tanımlı ifade fonksiyonları
Değişim karakterleri (Metacharacter) /devam
$: satırın en sonunu eşleştirir.
^: satırın en başını eşleştirir.
.: yeni satır haricindeki herhangi bir karakteri eşleştirir.
\: bir sonraki değişim karakterini parantez içine alır.
\w: sadece harfler, rakamlar ve altçizgiyi eşleştirir, [a-zA-Z0-9_] ile aynıdır.
\W: \w’nin tam tersini eşleştirir. Rakam, harfler ve alt çizgi haricindeki karakterler.
16
Perl’de tanımlı ifade fonksiyonlarıDeğişim karakterleri (Metacharacter) /Örn
Sonunda an olan isimleri seçelim
Ercan, nurcan, ertan, mercan vs…
/an\b/
İlk linux geçen kelimeyi bulur (küçük büyük harfe duyarlı olmayan)
/\blinux\b/i
/\$\d+\g
$işaretinden sonra değerleri olan bütün metinleri verir.
17
PHP’deki tanımlı ifade fonksiyonları
$yiyeceklers = array("pasta", "biftek", "kumpir", "patetes");
$yiyecekler = preg_grep("/^p/", $yiyeceklers);
print_r($yiyecekler); //Array ( [0] => pasta [3] => patetes )
$satir = "vim simdiye kadar piyasaya sürülen en iyi kelime islemci programidir!";
if (preg_match("/\bVim\b/i", $satir)) print "Eşleşme bulundu!";
18
PHP’deki tanımlı ifade fonksiyonları$kullanici = "Isim: <b>Arda Şanlı</b> <br> Ünvan:
<b>PHP Uzmanı</b>";preg_match_all("/<b>(.*)<\/b>/U", $kullanici, $dizi);printf("%s <br /> %s", $dizi[0][0], $dizi[0][1]);
//$ ^ * ( ) + = { } [ ] | \\ : < >.$metin = "Maç bileti için 3*40 toplam 120 YTL ödedim
.";echo preg_quote($metin); //Maç bileti için 3\*40
toplam 120 YTL ödedim \.
$metin = "Odtü'nün sayfasına http://metu.edu.tr/ adresinden ulaşılabilir.";
echo preg_replace("/http:\/\/(.*)\//", "<a href=\"\${0}\">\${0}</a>", $metin);
19
PHP’deki tanımlı ifade fonksiyonları$taslak = "In 2007 the company faced plummeting
revenues and scandal.";
$eskikelimeler = array("/faced/", "/plummeting/", "/scandal/");
$yenikelimeler = array("celebrated", "skyrocketing", "expansion");
echo preg_replace($eskikelimeler, $yenikelimeler, $taslak);
20
PHP’deki tanımlı ifade fonksiyonlarıfunction kisaltma($eslenen) {
$kisaltmalar = array('WWW' => 'World Wide Web','IRS' => 'Internal Revenue Service','PDF' => 'Portable Document Format');
if (isset($kisaltmalar[$eslenen[1]]))return $eslenen[1] . " (" . $kisaltmalar[$eslenen[1]] . ")";
elsereturn $eslenen[1];
}// hedef metin$metin = "The <kisaltma>IRS</kisaltma> offers tax forms in
<kisaltma>PDF</kisaltma> format on the <kisaltma>WWW</kisaltma>.";
// hedef metin'e kisaltmalarin değerini yazdir$yenimetin =
preg_replace_callback("/<kisaltma>(.*)<\/kisaltma>/U", 'kisaltma', $metin);
print_r($yenimetin);
21
PHP’deki tanımlı ifade fonksiyonları
$duzensizMetin = "Servet+++++++Souza+++++++Beşliktaş+++++++++++Hakkari";
$alanlar = preg_split("/\+{1,}/", $duzensizMetin);
foreach($alanlar as $alan) echo $alan."<br />";
$pswd = "gizlipswd";
if (strlen($pswd) < 10)
echo "Şifreniz çok kısa!";
else
echo "Şifreniz geçerli!";
22
Metinleri karşılaştırmak$pswd = "süpergizlş";$pswd2 = "süpergizli";if (strcmp($pswd,$pswd2) != 0)
echo "Girilen şifreler eşleşmiyor!";else
echo "Girilen şifreşer eşleşiyor!";
• 0 eğer $pswd1 ve $pswd2 eşitse• -1 eğer $pswd1 $pswd2’den küçükse• 1 eğer $pswd2 $pswd1’den küçükse
$sifre = "3312345";if (strspn($sifre, "1234567890") == strlen($sifre))echo "\$Sifre sadece numaralardan oluşamaz!";//ilk metinde olup ve ikinci metinde de olan karakterlerin
sayısını veriyor
23
Metinleri karşılaştırmak$sifre = "a12345";
if (strcspn($sifre, "1234567890") == 0)
echo "sifre sadece numaralardan oluşamaz!";
//ilk metinde olup ikinci metinde olmayan karakterlerin sayısını veriyor.
24
Metinlerle UğraşmakHepsini küçük karakterlere dönüştürme
$url = "http://WWW.EXAMPLE.COM/";
echo strtolower($url); //http://www.example.com/
Hepsini büyük karakterlere dönüştürme
$cumle = "Hocam uğraş uğraş olmuyor bu PHP!";
echo strtoupper($cumle);
Sadece ilk harfi büyük yapıyor
$cumle = "Hocam uğraş uğraş olmuyor bu PHP!";
echo ucfirst($cumle);
Bütün harflerin ilk büyük yapıyor
$cumle = "Hocam uğraş uğraş olmuyo bu PHP!";
echo ucwords($cumle)
25
Metinlerle Uğraşmak$recete = "3 çay kaşığı rezene2 çay kaşığı ıhlamur1 tutam dereotu1 litre su";// yeni satırları <br>'e dönüştürüyorecho nl2br($recete);
Özel Karakterler• & dönüşür &• " dönüşür "• ' dönüşür '• < dönüşür <• > dönüşür >
$cumle = "PHP için yeterince <<iyi>> değilim!";echo htmlspecialchars($cumle);//kaynağı gör diyince PHP için yeterince <<iyi>>
değilim!</body>
26
Metinlerle UğraşmakKişisel dönüşüm
$tablo = array("<b>" => "<strong>", "</b>" => "</strong>");
$html = "<b>Bu günlük PHP haberi</b>";
echo strtr($html, $tablo);
// kaynağı görüntüle dersek <body>
<strong>Bu günlük PHP haberi</strong></body>
Tagları temizlemek
$deger = "Bu <a href='http://www.ornek.com/'>örnek</a>
<b>mükemmel</b>!";
echo strip_tags($deger, "<a>");
//kaynağı görüntüle dersek <a>tag’ı hariç diğer tagları temizler
27
Metinlerle Uğraşmak$bilgi = "Servet Souza:[email protected]|Silvan, Turkiye";// ayraçlar (:), (|) ve (,)$ayraclar = ":|,";$ayrilmis = strtok($bilgi, $ayraclar);// $ayrilmis dizisindeki herşeyi yazdirwhile ($ayrilmis) {
echo "Parçalar = $ayrilmis<br>";// ilk parametreyi çağırma.$ayrilmis = strtok($ayraclar);
}
$ozet = "bu sunumu hazırlarken PHP'de birçok kitaba ve kaynağa baktım. Bu kaynakların her birinde değişik stratejiler ele alınmış. Size uygun stratejiler
olup olmadığını veyasize uygun stratejilerin ne olduğuna karar vermek bazen zaman alabiliyor. En çok
destek aldığım kaynak<a href=\"http://www.php.net\">PHP 5's</a> nesne tabanlı programlama.";echo strip_tags($ozet)."<br>";$kelimeler = sizeof(explode(' ',strip_tags($ozet)));echo "\$ozet toplam kelime sayısı: $kelimeler";
28
Metinlerle UğraşmakDizileri metin’e çevirmek
$sehirler = array("Antalya", "Ankara", "Bolu", "İstanbul");
echo implode(" | ", $sehirler); //Antalya | Ankara | Bolu | İstanbul
İlk uygulamayı bulmak (strpos)
$aranilan = "index.html";
$log = "
192.168.1.11:/www/htdocs/index.html:[2006/02/10:20:36:50]
192.168.1.13:/www/htdocs/about.html:[2006/02/11:04:15:23]
192.168.1.15:/www/htdocs/index.html:[2006/02/15:17:25]
";
// aranilan dosyaya ilk ne zaman ulaşıldı
echo $pozisyon = strpos($log, $aranilan);
// o dosyanin son satırının bulunduğu yer
echo "<br>".$pozisyon2 = strpos($log,"\n",$pozisyon);
// aranılanın ne zaman erişildiğini öğrenmek
echo "<br>".$pozisyon = $pozisyon + strlen($aranilan) + 1;
// erişilme tarihini almak
echo "<br>".$timestamp = substr($log,$pozisyon,$pozisyon2-$pozisyon);
echo "<br>"."$aranilan dosyanın ilk erişildiği zaman: $timestamp";
29
Metinlerle UğraşmakMetinleri değiştirme
$yazar = "[email protected]";
$yazar = str_replace("@","(at)",$yazar);
echo "Bu kodun yazarina ulasmak icin $yazar adresini kullanabilirsiniz.";
$arac = "1944 Ford";
echo substr($arac, 5); //Ford
$arac = "1944 Ford";
echo substr($arac, 0, 6); //1944 F
$arac = "1944 Ford";
echo substr($arac, 1, -5); //944
echo "<br>".substr($arac, 2, -3); //44 F
30
Metinlerle Uğraşmak$aranankelimeler = array("Fransız", "yabancı", "eğitim", "dil", " ");
$paragraf = "Türk eğitiminin 1845’te çizilen genel yapısı zaten Fransız örneğine göre şekillenmiştir. Daha sonraki kuruluşlarda, eğitim yasa ve yönetmeliklerinde, okulların ders programlarında Fransız etkisi alabildiğine devam etmiştir. Okullarda okutulan yabancı dil büyük bir çoğunlukla Fransızcadır, Bahriye Mektebi hariç askerî ve sivil okulların yabancı dil dersleri Fransızca öğretmeyi amaçlamıştır. Uzun yıllar Tıbbiye’de öğretim Fransızca yapıldığı gibi, dış politika ve ticaret hayatına elit yetiştiren Galatasaray Sultanisi’nin öğretim dili de Fransızcadır (Ergün,1990).";
foreach($aranankelimeler as $aranan) {
echo "$aranan kelimesi paragrafta \"",substr_count($paragraf, $aranan)."\" defa geçmiştir.<br>";
}
$numara = "1234567899991111";
echo substr_replace($numara,"************",0,12); // ************1111
echo "<br>".substr_replace($numara,"************",0,5); //************67899991111
echo "<br>".substr_replace($numara,"************",0,-5); //************91111
echo "<br>".substr_replace($numara,"************",0,-10); //************7899991111
31
Metinlerle Uğraşmak$text = "\t\tBir kaç kelime bir şeyler :) ... ";
echo trim($text); //(\t), (\n), (\r), (\0), (\x0b)
$veri = "Alien";
echo "<br>".str_pad($veri, 10); // produces "Alien "
echo "<br>".str_pad($veri, 10, "-=", STR_PAD_LEFT); // produces "-=-=-Alien"
echo "<br>".str_pad($veri, 10, "_", STR_PAD_BOTH); // produces "__Alien___"
echo "<br>".str_pad($veri, 10, "_", STR_PAD_RIGHT);// produces "Alien_____"
echo "<br>".str_pad($veri, 6 , "___"); // produces "Alien_“
$cumle = "Besliktas sporlu Servet Souza Sivan Turkey";
// karakterler ve frekanslarını alir
$liste = count_chars($cumle, 1); //0, 1, 2, 3, 4 kullanılabilir
print_r($liste);
foreach($liste as $harf=>$frekans)
echo "Verilen cümlede \"".chr($harf)."\""." karakteri ". " $frekans defa kullanılmıştır<br />";
32
Metinlerle Uğraşmak$cumle = "Besliktas sporlu Servet Souza Sivan Turkey";
$liste = str_word_count($cumle); // sadece kelime sayısını verir
$cumle = "Besliktas sporlu Servet Souza Silvan Turkey";
$liste = str_word_count($cumle, 1); // dizi olarak dondurur
print_r($liste);
foreach($liste as $harf=>$kelime)
echo "Verilen cümlede $harf. kelime = $kelime<br />";
$cumle = "Besliktas sporlu Servet Souza Silvan Turkey";
$liste = str_word_count($cumle, 2); //indeks no’su cumledeki kaçıncı karakterde başladığını gösterir
print_r($liste);
foreach($liste as $harf=>$kelime)
echo "Verilen cümlede kelime = $kelime $harf. Karakterde başlar<br />";
33
Metinlerle Uğraşmak$cumle = "Besliktas sporlu Servet Souza Silvan Turkey, Servet Souza
Besliktas sporlu olmak icin cok ugrasti";
$kelimeler = str_word_count($cumle,2);
$tekrar = array_count_values($kelimeler);
print_r($tekrar);