Bu regex Desenler ne Maç mı?

2 Cevap php

Ben PHP regex ve aşağıda olanları, biraz karmaşık ve ben şu deseni eşleşen anlamıyorum ancak temel kalıplarını anlamak için yeni Cinsiyetim:

$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#... "<a href='' rel='nofollow'></a>", $ret);

$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*... "<a href='http://' rel='nofollow'></a>", $ret);

Birisi bunları açıklayabilir misiniz?

Teşekkürler.

2 Cevap

Kısacası: linkleri URL'leri değiştirin.

Ayrıntılı olarak:

  1. İlk regex ([\w]+) kümesinin bir veya daha fazla karakter ardından, ://, ardından sözcük karakteri ile başlar dizileri tarif [\w\#$%&~/.\-;:=,?@\[\]+].

    Muhtemelen http://, https:// veya ftp:// gibi URL protokolü / düzeni ile başlayan bir URL eşleşmesi gerekir.

    Ama aynı zamanda javascript:// maç olacaktır. Ve bu iyi değil: javascript://%0Aalert%28%22booo%21%22%29 JavaScript kodu eşittir:

    //
    alert("booo!")
    
  2. İkinci regex yine kümesinin bir veya daha fazla karakter ardından ya da www. ya da ftp. ile başlar sekansları, tarif [\w\#$%&~/.\-;:=,?@\[\]+].

    Bu muhtemelen sadece www. veya ftp. ile başlaması, URL'leri aynı olmalıdır. URL protokolü / şeması ardından URL'ye eklenir.

RegexBuddy alın, ve o (see screenshots) ne herhangi bir düzenli ifade anlamına geldiğini açıklıyor. Başka bir anwser here in SO that demonstrates that bulunmaktadır.

Neyse, preg_replace s ikinci argümanlar göre, onlar URL'leri maç ve onları tagify gerekir.