Karışık bir dize tüm URL'leri şerit (php)

4 Cevap

i iyi bir cevap bulamadık çünkü ben bu soruyu yayınlanamaz.

i can URL'ler ile metin içeren bir dize var.

ben bu dize tüm adresler şerit ve sadece metin izin bir işlev istiyorum.

örnek dize kutu böyle içerir:

1) hey buraya bir göz atın: http://xxx.xxx/545df5 Bu güzel!

2) hey buraya bir göz atın: http://www.xxx.xxx/545df5 Bu güzel!

3) hey buraya bir göz atın: Bu güzel xxx.xxx/545df5!

4) hey buraya bir göz atın: Bu güzel www.xxx.xxx/545df5!

Teşekkürler

4 Cevap

Ne gerçekten ihtiyacınız bir dize adresler bulmak ve hiçbir şey ile bu desen preg_replace bir katı regex olduğunu. O böyle bir regex izini kolay değil gerçi ben söyleyebilirim. Url'lerin varyasyonları bağlı olarak (ftp:// vs https:// vs yani http://) Tüm bunun hesabını çalışırken gerçek bir sorun haline çalıştırmak olabilir arıyoruz.

Here is a page that I found to be a good start though.

Regex önce tartışıldığı gibi gitmek için yoludur. Döndü Bir örnek burada: bir bulgu olduğunu korkunç sert (url regex deseni google) değil

http://www.geekzilla.co.uk/View2D3B0109-C1B2-4B4E-BFFD-E8088CBC85FD.htm

Ben de size çok güzel çevrimiçi regex test birini kullanarak regex öneriyoruz. (Non-java için) Benim favori

http://www.regextester.com/

Bu fonksiyon ("" dizeleri boşlukla ayrılmış varsayarak) yapmanız gerekir:

function isValidURL($url) {
    return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

function cleanUpUrls($urls) {
    $urlArray = explode(' ',$urls);
    $resultArray = array();
    foreach ($urlArray as $url) {
        if(!isValidURL($url)) {
            $resultArray[] = $url;
        }
    }
    return implode(' ',$resultArray);
}