如何使用PHP或regex修剪每行开头和结尾的空白

如何使用PHP或regex修剪每行开头和结尾的空白,php,regex,whitespace,trim,Php,Regex,Whitespace,Trim,如何使用PHP或regex修剪每行开头和结尾的空白 比如说, $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 dolo

如何使用PHP或regex修剪每行开头和结尾的空白

比如说,

$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
";

我添加了testarea,因此您可以清楚地看到换行符第一个解决方案:

使用换行符拆分原始字符串,在每个标记上使用,然后重新生成原始字符串

第二种解决方案:


使用正则表达式替换此正则表达式\s*\n\s*并使用替换。

对于此任务,使用正则表达式肯定更快。但是,如果您喜欢嵌套函数,那么所有行中也会出现空白:

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

马里奥的解决方案效果很好(谢谢你让马里奥救了我一天)。也许有人能解释为什么我后来检查跨平台兼容线路中断,比如

    (strstr($text, PHP_EOL))
即使存在换行符,也设置为FALSE

无论如何,将“\n”更改为PHP\u EOL解决了以下问题:

    $text = join(PHP_EOL, array_map("trim", explode(PHP_EOL, $text)));
您可以使用开关和
preg_replace
功能将其替换为零:

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

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

这里是另一个在每行开始和结束处修剪空白的正则表达式

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

请参见

谢谢,但是当我有多个换行符时,我对这个正则表达式和另一个正则表达式有问题-
$text=preg\u replace(“/(\r\n){3,}/”,“\r\n\r\n”,trim($text))-使用您的正则表达式,我无法再修剪多个换行符。。。为什么?我认为我的正则表达式只适用于您提供的示例,换行符在我的方法中丢失,然后被替换。您最好使用@mario的解决方案-它更健壮,可能更高效。正则表达式更快?我用你的方法测试了我的正则表达式(
/[\t]+$/m
)(只是用
PHP\u EOL
而不是“\n”),它大约慢了5倍(在~900个字符的字符串上进行1000次迭代,22,4ms比4,3ms)。这个正则表达式已经比这里的其他正则表达式快了两倍,因为它只删除尾随的空格。。
$text = preg_replace('/^[\t ]+|[\t ]+$/m', '', $text);