【问题标题】:Remove double space and space after line break from String从String中删除换行后的双倍空格和空格
【发布时间】:2020-10-12 11:31:50
【问题描述】:

所以,首先我有这个输入

$string = "Lorem ipsum 
dolor sit amet, consectetur adipiscing 
elit https://www.youtube.com/watch?v=example sed do eiusmod tempor incididunt https://www.youtube.com/watch?v=example2 https://www.youtube.com/watch?v=example3";

然后我想使用正则表达式从$string 中删除网址

$string = preg_replace('/[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)/', '', $string);

在我从字符串中删除所有 url 后,输出将是

Lorem ipsum 
dolor sit amet, consectetur adipiscing 
 elit  sed do eiusmod tempor incididunt  

问题是,有双倍的空间,我想让它更整洁

我试过用这个,它将所有的双空格替换为单空格

$string = preg_replace('/\x20+/', ' ', $string);

还有一个问题是换行后有空格

Lorem ipsum 
dolor sit amet, consectetur adipiscing 
 elit sed do eiusmod tempor incididunt

这让我很不舒服。

我需要一个解决方案来摆脱 url,但也要让它整洁。 我想要的最后一个结果是这样的

Lorem ipsum 
dolor sit amet, consectetur adipiscing
elit sed do eiusmod tempor incididunt

对不起,如果它看起来很奇怪,谢谢

【问题讨论】:

    标签: php regex


    【解决方案1】:

    使用preg_replace() 删除所有网址。

    使用trim() 删除任何剩余的空格

    再一次,使用preg_replace() 删除所有重复空格。 (regex)

    然后,要删除行首产生的任何空格,请将它们替换为空字符以删除它们。

    <?php
    
        $r = '/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i';
        $string = "Lorem ipsum
        dolor sit amet, consectetur adipiscing
        elit https://www.youtube.com/watch?v=example sed do eiusmod tempor incididunt https://www.youtube.com/watch?v=example2 https://www.youtube.com/watch?v=example3";
    
        // Remove url's
        $clean = preg_replace($r, ' ', $string);
    
        // Trim whitespaces
        $clean = trim($clean);
    
        // Replace dubble-space with single space
        $clean = preg_replace( '/\h+/', ' ', $clean);
    
        // Remove any spaces after newline
        $clean = preg_replace('/^ /m', '', $clean);
    
        // Show result
        echo $clean;
    
    

    输出:

    Lorem ipsum 
    dolor sit amet, consectetur adipiscing 
    elit sed do eiusmod tempor incididunt
    

    Try online


    注意:这可以通过结合一些调用来简化很多,我选择不这样做,所以步骤更清晰

    【讨论】:

      【解决方案2】:

      我会使用那些正则表达式:

      $string = "Lorem ipsum 
      dolor sit amet, consectetur adipiscing 
      elit https://www.youtube.com/watch?v=example sed do eiusmod tempor incididunt https://www.youtube.com/watch?v=example2 https://www.youtube.com/watch?v=example3";
      
      $string = preg_replace('/[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)([ ]*)?/', '', $string);
      $string = preg_replace('/(([ ]*)?(\r\n|\n)([ ]*)?)/', "\r\n", $string); # Remove any potantial space before line break and remove any potential space after line break
      
      echo $string;
      

      输出

      Lorem ipsum
      dolor sit amet, consectetur adipiscing
      elit sed do eiusmod tempor incididunt 
      

      注意:我刚刚在匹配 url 的正则表达式中添加了 ([ ]*)?,以确保在 url 之后也匹配空格

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多