如何使用PHP或正则表达式删除每行开头和结尾的空白字符?

4

如何使用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
";
6个回答

16

使用正则表达式对于这个任务来说肯定更快。但是如果你喜欢嵌套函数,这也可以trim所有行中的空格:

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

2
一个正则表达式更快吗?我测试了我的正则表达式(/[ \t]+$/m)和你的方法(只是用 PHP_EOL 替换 "\n")进行比较,结果它慢了大约5倍(对于一个 ~900 字符串的1000次迭代,22.4毫秒 vs 4.3毫秒)。 而且这个正则表达式已经比这里其他的两个更快了,因为它只删除尾随空格。 - Dennis98

4
<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>

我添加了测试区域,以便您可以清楚地看到换行符


谢谢,但我有一个问题,使用这个正则表达式时,当我有多个换行符时,会与另一个正则表达式产生冲突。代码如下:$text = preg_replace("/(\r\n){3,}/","\r\n\r\n",trim($text)); - 参考链接:https://dev59.com/QlvUa4cB1Zd3GeqPpQWH - Run
使用你的正则表达式,我无法再删除多个换行符了...怎么回事? - Run
我认为我的正则表达式只适用于你提供的示例,换行符在我的方法中丢失,然后被替换。最好使用@mario的解决方案-它更健壮,可能更有效。 - Billy Moon

0

这里是另一个正则表达式,可以去除每行开头和结尾的空格。

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

查看/m 修改器


0

您可以使用任何水平空白字符开关和preg_replace函数将它们替换为无:

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

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


0

第一种解决方案:

使用explode函数将原始字符串按换行符拆分,对每个标记使用trim函数进行修整,然后重新构建原始字符串...

第二种解决方案:

使用preg_replace函数将正则表达式\s*\n\s*替换为\n。


-1
Mario的解决方案很好(谢谢你,Mario——救了我的一天)。也许有人可以解释一下为什么它会使我后来检查跨平台兼容的换行符变得如此困难,例如:
    (strstr($text, PHP_EOL))

即使存在换行符,也会返回 FALSE。

无论如何,将 "\n" 更改为 PHP_EOL 可以解决此问题:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接