Php Ayrıştırma
Neler Öğreneceğim?
- Php de regex ile detaylı ayrıştırmayı öğreneceğiz
Gereksinimler
- Sublimetext / Notepad / Notepad++
- localhost veya sunucu / hosting
Zorluk Düzeyi
- Intermediate (Orta Seviye)
Not:
PHP son yayınladığı PHP 5.3.x sürümü ile birlikte aşağıda belirtilen fonksiyonların artık desteklenmeyeceğini duyurdu. split() kaldırıldı yerine preg_split() kullanılacak. split() kaldırıldı yerine preg_split() işleci ile kullanılacak. Düzenli ifadelerde preg_split() fonksiyonu.

Ayrıştırma
Söz dizimi:
preg_split(Şablon,Konu,Sınır,seçenek) sonuç bir dizi olarak geri döner
Şablon: Bir dizge olarak aranacak şablon.
Konu: Parçalara ayrılacak dizge.
Sınır: Belirtildiği takdirde sadece sınır sayıda alt dizge döner. sınır olarak -1, 0 veya NULL belirtilmişse herhangi bir sayı sınırlaması yok demektir ve genellikle seçenekler değiştirgesinin belirtilmesinin gerekli olduğu durumlarda kullanılır.
Seçenek: Kullanımı zorunlu olmamakla birlikte, ayrıştırma işlemlerinde ek seçenekler sunan sabitlerdir.
PREG_SPLIT_NO_EMPTY: Etkin olduğunda işlev tarafından sadece boş olmayan parçalar döndürülür.
PREG_SPLIT_DELIM_CAPTURE: Etkin olduğunda şablon içindeki yaylı ayraçlı ifade yakalanıp döndürülür.
PREG_SPLIT_OFFSET_CAPTURE: Etkin olduğunda, eşleşmenin olduğu son dizgenin başlangıç konumu da döndürülür. Bu seçenek dönen dizideki değeri değiştirir. Dizideki her eleman, 0 indisinde eşleşen alt dizge, 1 indisinde ise alt dizgenin konu içindeki başlangıcını içeren bir diziden oluşur.
Düzenli ifadelerde preg_split() fonksiyonu ile istediğimiz bir veriyi, istediğimiz bir noktadan bölerek ayrıştırabiliriz.
Kullanım şekli:
preg_split("/bölünecek nokta/", $değişken);
Burada bölünecek nokta veri içinde geçen herhangi bir karakter, cümle, sembol ve boşluk olabilir. $değişken ise bölme işleminin uygulanacağı veri yumağıdır.
<?php
$bolme = preg_split("/:/",'1:2:3');
foreach ($bolme as $eleman) {
print "$eleman <br>";
}
?>
Program her bir değeri: işaretinden tutarak tek, tek ekrana yazacaktır.
Çıktısı:
1 2 3
Aynı örneği bir değişken kullanarak yaparsak;
<?php
$deger="1:2:3:4:5:6:7";
$bolme = preg_split("/:/",$değer);
foreach ($bolme as $eleman) {
print "$eleman <br>";
}
?>
Bu örnek yukarıdaki örneğimizin aynısıdır. Sadece ayrıştırılacak veriler bir değişken aracılığı ile preg_split() fonksiyonuna aktarılmaktadır.
Örnek 2:
<?php
$veri ="1:2:::3:4::::::::5:6:7";
$bolme = preg_split("/:+/",$veri);
foreach ($bolme as $eleman) {
print "$eleman <br>";
}
?>
Çıktısı:
1 2 3 4 5 6 7
<?php
$veri ="1:2:::3:4::::::::5:6:7";
$bolme = preg_split("/:+/",$veri);
print "$bolme[0],$bolme[1],$bolme[2],$bolme[3],$bolme[4],$bolme[5],$bolme[6]";
?>
Çıktısı:
1, 2, 3, 4, 5, 6, 7
Bu örnekten görüleceği gibi eğer istersek preg_split() fonksiyonu ile elde ettiğimiz verilen tek, tek kullanabiliriz.
Bilinmeyenler
/+/: Bir veya birden fazla karakteri bulur.
/?/: Sıfır veya bir karakteri bulur.
/./: Tek bir karakteri bulur (\n) yeni satır haricinde herhangi bir karakter.
//:* Sıfır veya birden fazla karakteri bulur. İleri ve geri karakter aramalarında olabilir.
/./:* Tek bir strig değeri bulur.
/a./: Bulunacak değerler aa, ab, ax, gibi olabilir. \n yeni satır karakterleri içermez.
+ karakteri
Düzenli ifadelerde bu karakter kendisinden önce gelen değerin bir veya daha fazla geçtiği durumları araştırmada kullanılır.
/ço+k/: Bunu yazmakla: çok, çook, çoook gibi örnekleri araştırmış oluruz.
- karakterinin en iyi kullanıldığı yer preg_match fonksiyonudur. preg_match() fonksiyonu ile istenilen bir veriden ve istenilen bir yerden bu veriyi parçalara ayırmak mümkündür.
Örnek:
<?php
$text = "Bugün çoook önemli bir gün.";
if (preg_match("/ço+k/", $text, $sonuc)){
print $sonuc[0];
}
?>
ço+ Önüne artı koymakla birden fazla o karakterini araştırmış oluruz. Sonuç çoook olacaktır.
[ ] köşeli parantez
Kullanım şekli: /ab[abB]cd/
Alternatif değerleri araştırmak ve gruplara ayırmak için kullanılır.
Bunu yazmakla: abaB veya abcd olarak değerlendirmek demektir. Yani kısaca köşeli parantezin dışındaki herhangi bir değer köşeli parantezin içindeki ve dışındaki değerlerle eşleşebilir.
Örnek:
<?php
$text = "Bugün çoook çok önemli bir gün.";
if(preg_match_all("/ç[o]+k/",$text,$match)){
print $match[0][0]."<br>\n";
print $match[0][1]."<br>\n";
}
?>
Sonuç:
çoook
çok
Aynı örneği preg_match() fonksiyonu ile yaptığımızda sonuç sadece bir değer üzerinden gerçekleşecektir.
<?php
$text = "Bugün çoook çok önemli bir gün.";
if(preg_match("/ç[o]*k/",$text,$match)){
print $match[0]."<br>\n";
print $match[1]."<br>\n";
}
?>
Sadece çoook bulunur.
Bir preg_split() örneği:
<?php
$text = "Bugün -çoook çok ,önemli bir gün.";
$sonuc=preg_split("/[-,]/",$text);
print $sonuc[0]."\n";
print $sonuc[1]."\n";
print $sonuc[2]."\n";
?>
Sonuç:
Bugün
çoook çok
önemli bir gün
Bu örneğimizde preg_split() fonksiyonu ile aralarmda -, karakterleri olan değerler ayrıştırılmıştır.
[-, yazmakla herhangi bir yerinin bu işaretlerden birisiyle bitebileceği öngörülmüştür. preg_split() ile bu işaretlerin geçtiği yerden değerleri ayırması istenmiştir.
Aynı şekilde aşağıdaki alternatiflerde uygulanabilir.
/A[bcdefgh]/
İlk harf A diğer harfler köşeli parantez içindeki herhangi bir harfle başlayan bir kelime olabilir.
/No[0123456789]/
İlk harfler No diğeri bir sayı olan herhangi bir değer olacaktır.
/a[xyz]+1/
Artı işareti (+) grup içindeki (Köşeli parantez içindeki) bir ya da daha fazla tekrarlama anlamına gelmektedir.
axyz 1 , axyzzz 1, axl, ayyyl, ax 1 gibi ifadeler araştırılabilir.
Tab işareti \t
Veriler içinde geçen boşluklardan veriyi ayırmak için Tab işaretini kullanabiliriz.
<?php
$text = "Boşlukarın arasında olabilir.";
$sonuc=preg_split("/\t/",$text);
print $sonuc[0]."\n";
print $sonuc[1]."\n";
print $sonuc[2]."\n";
?>
Sonuç:
Boşlukarın
arasında
olabilir.
Bu örneğimiz preg_split() fonksiyonu kullanılarak veri içinde geçen boşluklardan parçalara bölünür ve $sonuc değişken atanır.
* işareti.
* işareti 0 veya daha fazla karakterin geçmesi anlamına gelmektedir. Eğer aranılan değerlerde olası karakterler yoksa sonuçta değişen bir şey olmaz.
/xyz*w/
Bunu yorumlayalım: xyzw olur, xyzzw olur, xyzzzzw olur. Burada * işareti hangi karakterin önündeyse o karakterin 0 veya birden fazla değerinin olup olmadığına bakılır.
/ARA[MN]*A/
Bunu yorumlayalım: ARAR olur, ARAMA olur, ARANA olur, ARAMNA olur.
Örnekler:
<?php
$veri="Bugün adııım, adım PHP programlamayı öğreneceğiz.";
if(preg_match("/adı*m/",$veri,$sonuc)){
print $sonuc[0];
}
?>
Sonuç:
adııım
Örnek 2:
<?php
$veri="Kitaplara BAKTIM bir şey bulamadım.";
if(preg_match("/BAK[IT]*M/",$veri,$sonuc)){
print $sonuc[0];
}
?>
Sonuç:
BAKTIM
Eğer aradığımız veride birden fazla değer geçiyorsa bunların hepsini almak için while() döngüsünü kullanabiliriz. Örneğin yukarıdaki örneğimizde eğer birden fazla BAKTIM kelimesi veri içinde geçseydi sadece yukarıdaki kodlar birisini bulacaktır.
Posted on Utopian.io - Rewarding Open Source Contributors
Your contribution cannot be approved because it is a duplicate. It is very similar to a contribution that was already accepted here.
You can contact us on Discord.
[utopian-moderator]