PHP: bir dize gelen bir URL almak için Düzenli İfade [çoğaltmak]

2 Cevap php

Possible Duplicates:
Identifying if a URL is present in a string
Php parse links/emails

Ben çeşitli kaynaklardan girdi alır ve URL'leri bulmak ve onları bir yere kaydetmek gerekiyor bazı PHP kod üzerinde çalışıyorum. Aşağıdaki gibi ele alınması gereken girdi tür:

http://www.youtube.com/watch?v=IY2j_GPIqRA
Try google: http://google.com! (note exclamation mark is not part of the URL)
Is http://somesite.com/ down for anyone else?

Çıktı:

http://www.youtube.com/watch?v=IY2j_GPIqRA
http://google.com
http://somesite.com/

Ben zaten çalışan internetten bir düzenli ifadeyi ödünç, ama ne yazık ki sorgu dizesi mendil ettik - iyi değil!

Normal bir ifade, ya da bu soruna belki başka bir çözüm koyarak Herhangi bir yardım mutluluk duyacağız.

2 Cevap

Jan Goyvaerts, Regex Guru, has addressed this issue in his blog. Epeyce uyarılar doğru parantez içinde URL'leri ayıklamak, örneğin vardır. İhtiyacınız ne tam olarak veri girişi "kalite" bağlıdır.

-Küçük harf duyarsız modunda kullanıldığında verdiğiniz örnekler için, \b(?:(?:https?|ftp|file)://|www\.|ftp\.)[-A-Z0-9+&@#/%=~_|$?!:,.]*[A-Z0-9+&@#/%=~_|$] çalışır.

Yani bir çok satırlı dize, kullanılan tüm eşleşmeleri bulmak için

preg_match_all('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];

Neden bu bir deneyin. Bu "URL düzenli ifade" Googling ilk sonucudur.

((https?|ftp|gopher|telnet|file|notes|ms-help):((\/\/)|(\\\\))+[\w\d:#@%\/;$()~_?\+-=\\\.&]*)

PHP, ama çalışması gerekir değil, ben sadece biraz öne kaçarak modifiye bölü.

source