【发布时间】:2013-12-05 05:41:33
【问题描述】:
我想到了用 PHP 从字符串中删除所有链接。
我需要一个 preg_replace 来删除和删除所有以 : 开头的单词
http:// 或 https:// 或 www。或 www3.或 ftp://
并以空格结尾。
例子:你好http://dsqdsq.com/fdsfsd?fsdflsd享受!
它将是:你好享受!
谢谢
【问题讨论】:
我想到了用 PHP 从字符串中删除所有链接。
我需要一个 preg_replace 来删除和删除所有以 : 开头的单词
http:// 或 https:// 或 www。或 www3.或 ftp://
并以空格结尾。
例子:你好http://dsqdsq.com/fdsfsd?fsdflsd享受!
它将是:你好享受!
谢谢
【问题讨论】:
我会这样做:
$output = preg_replace('!\b((https?|ftp)://)?www3?\..*?\b!', '', $input);
其中:
\b);然后删除直到下一个单词边界的所有文本。
注意:使用\b 通常优于检查空格。 \b 是一个零宽度(意味着它不占用输入的任何部分),它匹配字符串的开头、字符串的结尾、从单词到非单词字符的转换或从非单词字符的转换单词到单词字符。
【讨论】:
$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);
【讨论】:
像这样?没有检查就从我的头顶上掉下来
/(http:\/\/(.*?)\s)/i
【讨论】:
嗯..试试
$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 的解决方案无法正常工作,因为 . (dot) 也是单词边界,所以我们应该在末尾使用空格标记 \s 而不是单词 bouadry:
$output = preg_replace('!\b((https?|ftp)://)?www3?\..*?\s!', '', $input);
【讨论】: