【问题标题】:How do you trim white space on beginning and the end of each new line with PHP or regex如何使用 PHP 或正则表达式在每一行的开头和结尾修剪空白
【发布时间】:2011-09-07 13:54:09
【问题描述】:

如何使用 PHP 或正则表达式在每个新行的开头和结尾修剪空白?

例如,

$text = "similique sunt in culpa qui officia 

     deserunt mollitia animi, id est 

  laborum et dolorum fuga   

";

应该是,

$text = "similique sunt in culpa qui officia

deserunt mollitia animi, id est

laborum et dolorum fuga
";

【问题讨论】:

    标签: php regex whitespace trim


    【解决方案1】:

    对于这项任务,使用正则表达式肯定更快。但是,如果您喜欢嵌套函数,这也将在所有行中使用 trim 空格:

    $text = join("\n", array_map("trim", explode("\n", $text)));
    

    【讨论】:

    • 正则表达式更快?我针对您的方法测试了我的正则表达式(/[ \t]+$/m)(仅使用PHP_EOL 而不是“\n”),它慢了大约 5 倍(22.4 毫秒对 4.3 毫秒,在 ~900 字符字符串上进行 1000 次迭代) .而且该正则表达式已经比这里的其他正则表达式快两倍,因为它只删除尾随空格..
    【解决方案2】:
    <textarea style="width:600px;height:400px;">
    <?php
    
    $text = "similique sunt in culpa qui officia 
    
         deserunt mollitia animi, id est 
    
      laborum et dolorum fuga   
    
    ";
    
    echo preg_replace("/(^\s+|\s+$)/m","\r\n",$text);
    
    ?>
    </textarea>
    

    我添加了 testarea 以便您可以清楚地看到换行符

    【讨论】:

    • 谢谢,但是当我有多个换行符时,这个正则表达式与另一个正则表达式有问题 - $text = preg_replace("/(\r\n){3,}/","\r\n\r\n",trim($text)); - stackoverflow.com/questions/7328404/…
    • 用你的正则表达式,我不能再修剪多个换行符了……怎么会?
    • 我认为我的正则表达式仅适用于您提供的示例,换行符在我的方法中丢失,然后被替换。你最好使用@mario 的解决方案——它更健壮,而且可能更高效。
    【解决方案3】:

    第一种解决方案:

    explode 换行符分割原始字符串,在每个标记上使用trim,然后重建原始字符串...

    第二个解决方案:

    将此正则表达式 \s*\n\s* 替换为 \n 与 preg_replace

    【讨论】:

      【解决方案4】:

      您可以使用any horizontal whitespace character 开关和preg_replace 函数将它们替换为空:

      $text = trim(preg_replace('/(^\h+|\h+$)/mu', '', $text));
      

      如果您需要在文件中保留空格,请删除 trim 或替换为 ltrim 函数

      【讨论】:

        【解决方案5】:

        这里是另一个正则表达式,它在每​​行的开头修剪空格..

        $text = preg_replace('/^[\t ]+|[\t ]+$/m', '', $text);
        

        /m modifier

        【讨论】:

          【解决方案6】:

          马里奥的解决方案效果很好(感谢马里奥 - 拯救了我的一天)。也许有人可以解释为什么它会变成我后来的跨平台兼容换行符检查,例如

              (strstr($text, PHP_EOL))
          

          即使存在换行符也为 FALSE。

          无论如何,将“\n”更改为 PHP_EOL 解决了这个问题:

              $text = join(PHP_EOL, array_map("trim", explode(PHP_EOL, $text)));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-03
            • 2020-05-07
            • 1970-01-01
            相关资源
            最近更新 更多