【问题标题】:preg_replace to remove all words beginning with http:// and ending with a spacepreg_replace 删除所有以 http:// 开头并以空格结尾的单词
【发布时间】:2013-12-05 05:41:33
【问题描述】:

我想到了用 PHP 从字符串中删除所有链接。

我需要一个 preg_replace 来删除和删除所有以 : 开头的单词

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

并以空格结尾。

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

它将是:你好享受!

谢谢

【问题讨论】:

    标签: php url


    【解决方案1】:

    我会这样做:

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

    其中:

    • 从单词边界开始 (\b);
    • 可选择以 http://、https:// 或 ftp:// 开头;和
    • 有一个以 www 开头的域名。或 www3。

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

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

    【讨论】:

    • +1 为 \b !真的很好的操作员知道!你每天都会学到新东西!
    【解决方案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);
    

    【讨论】:

    • 这是否需要在开头有一个空格 - 即以 URL 开头的行不匹配?
    【解决方案3】:

    像这样?没有检查就从我的头顶上掉下来

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

    【讨论】:

      【解决方案4】:

      嗯..试试

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

      【讨论】:

        【解决方案5】:

        Cletus 的解决方案无法正常工作,因为 . (dot) 也是单词边界,所以我们应该在末尾使用空格标记 \s 而不是单词 bouadry:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-24
          • 1970-01-01
          • 2021-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多