2011-01-22 16 views
7

Bunun regex ile ilgili bazı olduğunu varsayalım, ama bu bir tek sahip olduğu bir sanat - ve biraz yardıma ihtiyacım var.Php @ twitter hesabına @username ile değiştirmek için

Bir öykü görüntülediğimizde, tüm metni değişken bir biçimde saklarız - diyelim ki $ story.

İstediğim şey bir str_replace (bence ihtiyacım olan şey) bunun böyle bir şey söylemesidir "Eğer metinte @something varsa, o zaman onu <a href="http://www.twitter.com/something">@something</a> gibi bir bağlantıya dönüştürün. @ sembolünden önce (e-posta adreslerini hariç tutmak için)

Ayrıca, bir boşluk veya noktalama işareti varsa, 'bir şeyi' durdurmamız gerekir. böylece o bir şey. bu işlemin nasıl yapılacağıyla ilgili herhangi bir öneriye dönüşmüyor mu?

preg_replace('/(?<=\s)@(.*?)/', '<a href="....com/$1">@$1</a>') 

kafamın üst gidiyor:

cevap

13
$input = preg_replace('/(^|\s)@([a-z0-9_]+)/i', 
         '$1<a href="http://www.twitter.com/$2">@$2</a>', 
         $input); 

See it

Bu boşluk veya hiçbir şey öncesinde bir @ maçları (o başında olduğunda). Sadece twitter adıyla eşleşen ancak boşluk veya hiçbir şey bundan önce olduğu takdirde

$input = preg_replace('/(?<=^|\s)@([a-z0-9_]+)/i', 
         '<a href="http://www.twitter.com/$1">@$1</a>', 
         $input); 

:

Ayrıca pozitif olan ileriye dönük kullanılarak kısaltılabilir.

+0

Teşekkürler! Mükemmel çalıştı. – Andelas

+0

İkinci bağımsız değişken (ikinci örnekte) $1 'olmalıdır. – BudgieInWA

+0

Hey, ben düzenli ifadeyi öğreniyorum ve bu örnek benim için çok yararlı. İlk örneğin neredeyse tamamını alıyorum, ancak ilk kalıbın sonunda ne/i ne olduğunu anlamıyorum. Birisi açıklamak ister misiniz? –

6

Pozitif olan ileriye dönük işe yarayacak. "Eğer boşluk olan bir şeyden önce gelen bir @ varsa, @ 'den sonra aşağıdakileri yapın ve html etiket sarmalarını yapın".

+1

Peki, normal ifadede '.' yerine [a-z0-9 _-]' yerine ister misiniz? Twitter adı özel karakterlere veya boşluklara sahip olamayacağı için (regex'iniz şu anda alacaktır. Aslında, dizenin sonuna kadar yemek yiyecekti) ... – ircmaxell

+0

Doğru bir twitter adı olduğunda başarısız olur. bir boşluk olmadan başlıyor. – codaddict

+0

Bu, "@" sembolünü bulmakta ve bir bağlantı oluşturuyor - ancak URL'yi ya da nelerin görüntülendiğini belirten metni kullanmıyor. Gördüğüm şey @ ' – Andelas

İlgili konular