preg_split () ve çapa için bir dize tüm bağlantıları dönüştürme?

3 Cevap php

Ben bir dize (bu örnekte $ string) var ve ben aşağıdakileri yapmak istiyorum: dizgesini çözümler ve içindeki tüm bağlantılar dönüştürmek (açık / kapalı çapa etiketi ekleyerek) "fiili bir bağ" için - ne iyi yoldur Bu do? Ben değişiklik yapmak için aslında sonra str_replace kullanma fikri ile dize bulunan bağlantıları bir dizi, () oluşturmak için () preg_split kullanarak çalıştı. I () preg_split w / metin dizesinde bağlantıları izole bir sabit zaman yaşıyorum, çünkü bu yaklaşım, ancak çalışmıyor.

Ben bu yaklaşımı ile gidiyordu neden bu kadar şu içinde $ string çeşitli bağlantılar içerebilir. Ben bağlantıları vaktinden veya str_replace desen eşleştirme ile çalıştı eğer ben set olacağını ne olduğunu tam olarak biliyordu eğer.

Kısacası, ben gitmek için en iyi yolu olarak yukarıda açıklanan yaklaşım yok. Daha iyi bir yöntem nedir?

  • Nicholas

3 Cevap

Bu preg_replace için düşünülmüştü tam şey türüdür ...

preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);

EDIT: whaddya biliyorum, iyi Google "URL regex PHP" için çarptı: http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/

# PHP Example: Automatically link URL's inside text.

$text = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text);

Eğer tam genelliği URL'leri eşleştirmek istiyorsanız, bir şeytani karmaşık bir düzenli ifade gerekir, ama en yaygın HTTP / HTTPS URL'leri maç unutmayın, yukarıdaki regex çalışması gerekir.

Sana preg_split() amacını yanlış anlama düşünüyorum. Bu ayrı bir regex dayalı bir dize bölmek için kullanılır. Örneğin size "\ d" bir regex preg_split kullanabilirsiniz ve bir 4-eleman dizisi "one" oluşan, geri almak istiyorum "one1two2three3four" bir veri dize varsa, "iki" , "üç", "dört".

Linkler her zaman özel karakterleriyle ayrılır Yani sürece, preg_split() iş için doğru araç değildir. Muhtemelen döndürülen farklı maçlarda preg_match() kullanın ve sonra döngü isteyeceksiniz.

Düzenleme: David belirtildiği gibi veya, preg_replace() daha iyi preg_match().

Düzenli ifade bağlantılar nasıl görüneceğini bağlıdır, ya da nerede (özel bir HTML Tag içinde, tırnak içinde vb) ortaya çıkabilir.

Ayrıca, giriş gelen yere bağlıdır. Bir kullanıcıdan gelen ise, bir markdown-gibi sözdizimi kullanmak daha iyi bir fikir olabilir.

Her neyse, kontrol: http://regexlib.com/Search.aspx?k=links URI'lere ve bu maç için iddia bazı düzenli ifadeler için. Daha sonra (aslında David tarafından yayınlanmıştır) kullanabilirsiniz:

preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);