Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Preg_replace özel karakterler

İyi günler www.siteadi.com/yazinin_basligi şeklinde URL yapmak başlığı altında bir function inceledim ama bazı yerlerde takıldım.

$text = preg_replace('~[^\pLd]+~u', '-', $text);

$text = preg_replace('~[^-w]+~', '', $text);

burda her bir karakterin ne iş yaradığını bulamadım.
+1
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • sharq adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    115 cevap - 141 soru
    Bunun için Regular Expression öğrenmen gerekli,

    preg_* fonksiyonları regex kabul ederler, senin yazmış olduğun örnekte

    ~[^pLd]+~u

    burada ~ "delimiter" olarak tanınmaktadır. bunun yerine herhangi bir karakter konulabilir fakat ne koyduysan o karakter escape edilmesi gereken karakter olur.

    [ ] (köşeli parantez) "veya" ifadesi katar. [abc] "a veya b veya c" demektir, fakat karakter bazlıdır. kelime bazlı olması için (kelime1|kelime2|kelime3) şeklinde olmalıdır. aralık da verilebilir "a-z" a ile z arasındaki, "1-9" 1 ile 9 arasındaki demektir.

    [ ] içerisindeki ^ işareti "değilse / olmayan" ifadesi katarken (mesela [^>] demek, "> işareti yokken" demektir) diğer koşullarda "başlıyorsa" ifadesi katar.

    $ ifadesi "bitiyorsa" demektir.

    * ifadesi "en az 0 en çok sonsuz", + ifadesi ise "en az 1 en çok sonsuz" ifadesi katar.

    "." (nokta) "herhangi bir karakter" demektir.

    Mesela ".*" "herşey" demektir. Çünkü, "herhangi bir karakterden en az 0 veya sonsuz tane" manası verir.

    "a+" ise "a karakterinden en az 1 veya sonsuz tane" ifadesi katacaktır.

    [a-z]+ ifadesi "a ile z aralığındaki herhangi bir karakterden en az 1 veya sonsuz tane" ifadesi katar.

    PHP'de regex kullanımlarında "()" (parantez) işareti alınması gereken değişkeni temsil eder.

    O yüzden, "[a-z0-9]+" gibi ifadeleri çok görürsünüz.

    PHP'de delimiterlerdan sonra bu regex ile ilgili ayarlar belirlenir

    i = incasesensitive
    u = utf8 / unicode
    s = no-space
    gibi..

    Eğer bu karakterlerin çalışmasını istemiyorsanız ile escape edebilirsiniz.

    Mesela: [[]] demek "[ veya ] karakteri olan" demektir

    Örnek bir php kodu
    kaynağı göster
    yazdırnedir?


    $regex = '~<a[^>]*>(.*)<\/a>~ui';
    




    regex kodu, size HTML'deki bir tagını verir.

    Eksik olabilir, tüm bilgiye php.net'ten ulaşabilirsiniz.

Cevaplar

  • sharq adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    115 cevap - 141 soru
    Bunun için Regular Expression öğrenmen gerekli,

    preg_* fonksiyonları regex kabul ederler, senin yazmış olduğun örnekte

    ~[^pLd]+~u

    burada ~ "delimiter" olarak tanınmaktadır. bunun yerine herhangi bir karakter konulabilir fakat ne koyduysan o karakter escape edilmesi gereken karakter olur.

    [ ] (köşeli parantez) "veya" ifadesi katar. [abc] "a veya b veya c" demektir, fakat karakter bazlıdır. kelime bazlı olması için (kelime1|kelime2|kelime3) şeklinde olmalıdır. aralık da verilebilir "a-z" a ile z arasındaki, "1-9" 1 ile 9 arasındaki demektir.

    [ ] içerisindeki ^ işareti "değilse / olmayan" ifadesi katarken (mesela [^>] demek, "> işareti yokken" demektir) diğer koşullarda "başlıyorsa" ifadesi katar.

    $ ifadesi "bitiyorsa" demektir.

    * ifadesi "en az 0 en çok sonsuz", + ifadesi ise "en az 1 en çok sonsuz" ifadesi katar.

    "." (nokta) "herhangi bir karakter" demektir.

    Mesela ".*" "herşey" demektir. Çünkü, "herhangi bir karakterden en az 0 veya sonsuz tane" manası verir.

    "a+" ise "a karakterinden en az 1 veya sonsuz tane" ifadesi katacaktır.

    [a-z]+ ifadesi "a ile z aralığındaki herhangi bir karakterden en az 1 veya sonsuz tane" ifadesi katar.

    PHP'de regex kullanımlarında "()" (parantez) işareti alınması gereken değişkeni temsil eder.

    O yüzden, "[a-z0-9]+" gibi ifadeleri çok görürsünüz.

    PHP'de delimiterlerdan sonra bu regex ile ilgili ayarlar belirlenir

    i = incasesensitive
    u = utf8 / unicode
    s = no-space
    gibi..

    Eğer bu karakterlerin çalışmasını istemiyorsanız ile escape edebilirsiniz.

    Mesela: [[]] demek "[ veya ] karakteri olan" demektir

    Örnek bir php kodu
    kaynağı göster
    yazdırnedir?


    $regex = '~<a[^>]*>(.*)<\/a>~ui';
    




    regex kodu, size HTML'deki bir tagını verir.

    Eksik olabilir, tüm bilgiye php.net'ten ulaşabilirsiniz.