bütün kelimeler http:// ile başlayan ve bir boşluk ile biten kaldırmak için preg_replace

5 Cevap php

i PHP ile bir dize gelen tüm bağlantıları kaldırmak için bir fikrim var.

i ile başlayan tüm kelimeleri çıkarın ve şerit bir preg_replace gerekir:

http:// veya https:// ya da www. veya www3. veya ftp://

ve bir boşluk ile biten.

örnek: merhaba http://dsqdsq.com/fdsfsd?fsdflsd tadını çıkarın!

o olacak ediyor: merhaba tadını çıkarın!

Teşekkürler

5 Cevap

Ben bunu bu şekilde yapardı:

$output = preg_replace('!\b((https?|ftp)://)?www3?\..*?\b!', '', $input);

Hangi:

  • Bir kelime sınırında başlar (\b);
  • İsteğe bağlı http://, https:// ya da ftp:// ile başlar; ve
  • Www ile başlayan bir etki alanı adı vardır. veya www3.

Sonraki kelime sınırının o ve tüm metin kadar sonra silinir.

Note: \b alanlar için kontrol genellikle daha üstündür kullanma. \b dize başlangıcını maçları (bu girişin hiçbir bölümünü tüketir anlamı) sıfır genişlik, dize sonu olmayan bir kelime karakter ya geçiş için bir kelime geçiş Sözcük karakteri olmayan bir kelime.

$string = 'hello http://dsqdsq.com/fdsfsd?fsdflsd enjoy !';
$stripped_string = preg_replace('; ((ftp|https?)://|www3?\.).+? ;', ' ', $string);

Update: Burada daha iyi çalışacaktır \ b yerine boşluk, ile. Cletus Big teşekkürler!

$string = 'hello http://dsqdsq.com/fdsfsd?fsdflsd enjoy !';
$stripped_string = preg_replace(';\b((ftp|https?)://|www3?\.).+?\b;', ' ', $string);

böyle bir şey? Sadece kontrol etmeden kafamın üst kapalı

/(http:\/\/(.*?)\s)/i

hmm .. deneyin

$pattern=array(
        '`((?:https?|ftp)://\S+[[:alnum:]]/?)`si',
        '`((?<!//)(www\.\S+[[:alnum:]]/?))`si'
        );
$output = "http://$1";
$input = // set some url here;
preg_replace($pattern,$output,$input);

Cletus dan Çözüm nedeniyle düzgün çalışmıyor. (Nokta) biz sonunda yerine kelimesinin bouadry arasında \ s boşluk marker kullanmak gerektiğini de kelime sınırıdır:

$output = preg_replace('!\b((https?|ftp)://)?www3?\..*?\s!', '', $input);