preg_replace删除所有以http://开头并以空格结尾的单词

时间:2010-01-12 20:40:44

标签: php url

我想知道用PHP删除字符串中的所有链接。

我需要一个preg_replace来删除并删除以:

开头的所有单词

http://或https://或www。或www3。或ftp://

以白色空格结束。

示例:你好http://dsqdsq.com/fdsfsd?fsdflsd享受!

它将是:你好享受!

由于

5 个答案:

答案 0 :(得分:3)

我会这样做:

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

其中:

  • 从字边界开始(\b);
  • 可选择以http://,https://或ftp://开头;和
  • 域名以www开头。或www3。

然后删除直到下一个单词边界的那个和所有文本。

注意:使用\b通常优于检查空格。 \b是一个零宽度(意味着它不消耗任何输入的一部分),它匹配字符串的开头,字符串的结尾,从单词到非单词字符的转换或从a的转换。非单词到单词字符。

答案 1 :(得分:2)

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

更新:这是使用\ b而不是空格,这将更好用。非常感谢cletus!

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

答案 2 :(得分:0)

这样的事情?只是在我的头顶而不检查

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

答案 3 :(得分:0)

嗯..试试

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

答案 4 :(得分:0)

Cletus的解决方案无法正常工作,因为。 (点)也是单词边界所以我们应该使用空白标记\ s而不是最后的单词bouadry:

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