Regex (Regular Expressions : Düzenli Ýfadeler) Nedir?
Bütün programlama dillerinde kullanabileceðiniz çok iyi düþünülmüþ bir kural mekanizmasýdýr.
Ýlk baktýðýnýzda "bunun neresi düzenli, tam tersine bu þey oldukça düzensiz görünüyor" diyebilirsiniz. Çünkü gerçekten düzensiz görünen karakter grubudur. Regex (Regular Expressions'un genel olarak kýsaltmasý regex olarak kullanýlýr) bizim metinlerimiz içerisinden belirlediðimiz kurallara benzeyen metin parçalarýný seçmemizi; kullandýðýnýz dile göre deðiþtirmemizi de saðlayabilir. Mesela bir e-posta'nýn doðru olabilirlik kurallarý vardýr. Sitenizde girilen epostalarý bu þekilde doðru veya yanlýþ formatta olup olmadýklarýný kontrol edebilirsiniz.
Bu dökümanda otomatik olarak linkleri nasýl çevireceðimizden bahsedeceðim.
Metinlerde girilen þeylerin link olup olmadýklarýný bazý mantýksal kurallara göre bölelim
mesela bir link önce protokolü ile baþlar "http://" "ftp://" "ssh://" "file://" vb gibi. Bu baþlangýçlar bize girilen þeyin link olduðunu gösterebilir. Ayný þekilde hýzlý yazýmla birlikte "www." ile baþlayan þeyler ".com" ile biten þeyler de bize link olarak seçmemizi saðlayacak kriterler.
PHP'de regex fonksiyonlarý olarak erege_replace fln kullanabilirsiniz fakat preg_replace daha yetenekli olduðundan preg_replace'e özel bir düzenli ifade kuralý kullanacaðýz.
Þimdi doðrudan düzenli ifade kuralýný verip sonra açýklamaya çalýþacaðým :
http:// ftp:// gibi protokolü ile yazýlmýþ linkler için :
seçim kurallarýný kullanýyoruz.
En baþtaki [\n] link eðer satýr baþýnda ise seçebilmemizi saðlýyor. Eðer bu ibareyi belirtmezsek yüksek ihtimal sadece satýr içindeki linkler dönüþecektir. Bunu belirten kural 1. grup parantez olduðundan \1 ile kullanýlabilecek.
Genel bir kural koymadýk protokol belirtecimz için çünkü tonlarca farklý protokol var. Ýstersek ikinci grup parantez'e sadece http sadece ftp gibi belirteçler kullanarak istediðimiz protokole istediðimiz link deðiþimini uygulayabiliriz. Mesela smb:// için bir windows paylaþým iþareti koyabiliriz otomatik çevirdiðimiz link'in yanýna, ya da ftp:// için dosya transfer'i anlatan küçük bir ikon. Neyse ikinci grup parantez bizim protokol adýmýzý ifade ediyor. Bunu \2 ile otomatik link çevirmede kullanacaðýz.
Statik olarak "://" ibaresi arandýktan sonra 2. grup parantezde tüm linkimizi tarayabilecek kural bulunuyor. Burada dikkat etmemiz gereken þeyler, bir link'te kullanýlabilecek özel karakterler olacaktýr. Mesela bir linkte # & % = : ; gibi çok karakter vardýr. Eðer bunlarý belirtmezsek. Kullanýcýnýn burada belirtmediðimiz karakterleri içeren bir link giriþinde otomatik link çevirilirken o belirtmediðimiz karakterden sonrasý link'e dahil edilmeyecektir. Eski sitemde böyleydi
Bu üçüncü grup parantez'le seçilen "www.deneme.com.tr/deneme.php?asd=1&qwe=2$%_*#git" gibi kýsým \3 deðiþkenine atanacaktýr.
Sonuç olarak biz metinimizi þu aþaðýdaki kod ile otomatk link haline çevirebileceðiz :
$yazi = preg_replace("#([n])([a-z]+?)://([a-z0-9-.,?!%*_#:;~&$@/=+]+)#ie",
"'1<a href=\"2://3\">2://3</a>'", $yazi);
?>
Bu sitede kullandýðým otomatik link dönüþüm fonksiyonu ise þu þekilde :
Bu fonksiyon ile linklerinizi ve epostalarýnýzý otomatik dönüþtirebilirsiniz.
function linkler( $yazi ) {
// http seklindekiler
$yazi = preg_replace("#([n])([a-z]+?)://([a-z0-9-.,?!%*_#:;~&$@/=+]+)#ie",
"'1<a href=\"2://3\">2://3</a>'", $yazi);
// www seklindekiler
$yazi = preg_replace("#([n ])[Sadece Kayýtlý Kullanýcýlar Linkleri Görebilir. Kayýt Olmak Ýçin Týklayýn...][a-z0-9-]+).([a-z0-9-.~]+)((?:/[a-z0-9-.,?!%*_#:;~&$@/=+]*)?)#i",
"1<a href=\"http://www.2.34\">www.2.34</a>", $yazi);
// epostalar
$yazi = preg_replace("#([n ])([a-z0-9-_.]+?)@([w-]+.([w-.]+.)?[w]+)#i",
"1<a href=\"mailto:2@3\">2@3</a>", $yazi);
return($yazi);
}
?>




Ekim 9th, 2006 at 16.08
Merhaba arkadaslar Sitemdeki urleler .net/aydin_yemekleri_ve_adetleri.hmtl
Åžeklinde yani alt cizgili ( ___ )
ben bunu assadaki gibi
.net/aydin-yemekleri-ve-adetleri.hmtl
Ortadan cizgili yapmak istiyorum ( ---- )
Bunu nasil Yapabilirim
Ekim 10th, 2006 at 3.58
sanýrým dedigini .htaccess ten kolayca halledebilirsiniz.