preg_replace (), ve onunla gitmek kısaltmalar?

3 Cevap php

Geçenlerde PHP için basit bir Twitter API ile çalışan ve @ adı twitter.com / username ile bağlantılı hale getirmek için bu kodu rastladım oldum. Ne yazık ki bu kod hata sonucu, yani http://twitter.com/@username username linkleri @ onu oluşturur. Böyle ^ \ v ve diğerleri (aşağıda görüldüğü gibi) gibi ben anlamıyorum bu kod birçok parçalar vardır. Herkes bana onlar delalet ne bir açıklama verebilir misiniz?

$ret = preg_replace('/(^|[^\w])(@[\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret);

3 Cevap

Kolay tek:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret);

Tek fark, @ bu el bağlantı içinde çıkışa eklenecek anlamına gelir yakalama grubunun dışına idi.

\ D gereksiz böylece Ayrıca, \ w basamak içerir. Yani olabilir basitçe için:

$ret = preg_replace('/^|([^\w])@([\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret);

@ kaldırmak için, kullanın:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret);

Bu dış @ hamle, ikinci yakalama grup

Ayrıca (birden fazla dilde) düzenli ifadeler hakkında bazı mükemmel bilgi için http://www.regular-expressions.info/ bakın

Peki, ^\v ilk karakteri bir "dikey boşluk" karakteri olması gerektiği anlamına gelir, sizin sorunuzu cevaplamak için. Temelde "boş bir yeni bir çizgi ile başlar" demektir

EDIT: Aslında demektir ^\w çok daha yaygın meants gibi görünüyor "bir 'söz' karakteri ile başlamalıdır." Yani, bir harf veya bir sayıdır.

Tüm bu karakterler delalet ne öğrenebilirim here