Php 消除过多的线路回流

Php 消除过多的线路回流,php,whitespace,Php,Whitespace,我正在寻找类似trim()的东西,但在字符串的范围内。用户有时会在键入后输入2、3、4或更多行返回,我需要清理此输入 样本输入 i like cats my cat is happy i love my cat hope you have a nice day 期望输出 i like cats my cat is happy i love my cat hope you have a nice day 我没有看到任何内置的东西,字符串替换需要多次迭代才能完成工作。在我设计一个小

我正在寻找类似trim()的东西,但在字符串的范围内。用户有时会在键入后输入2、3、4或更多行返回,我需要清理此输入

样本输入

i like cats


my cat is happy
i love my cat



hope you have a nice day
期望输出

i like cats

my cat is happy
i love my cat

hope you have a nice day
我没有看到任何内置的东西,字符串替换需要多次迭代才能完成工作。在我设计一个小的递归字符串替换之前,我想看看你们还有什么其他的建议


我有一种奇怪的感觉,这一个也有一个正则表达式。

你需要在多少文本上执行此操作?如果小于约100k,则可能只需使用简单的搜索并替换regex(搜索类似于
/\n+/
的内容并替换为
\n

另一方面,如果需要处理兆字节的数据,则可以逐个字符解析文本,将输入复制到输出,除非遇到多个换行符,在这种情况下,只需复制一个换行符,而忽略其余换行符


不过,我不建议使用递归字符串替换,这听起来非常慢。

以下正则表达式应该删除多个换行符,而忽略单换行符,根据您的定义,这是可以的:

function str_squeeze($body) {
    return preg_replace("/\n\n+/", "\n\n", $body);
}
ereg_replace("\n\n+", "\n\n", $string);
您可以用它来测试它,这非常方便(但它似乎与PHP不完全相同)


[EDIT]修复了“to”,因为它们似乎不起作用。不得不承认我刚刚在web工具中测试了正则表达式。

最终获得了它,需要preg,因此您在php中使用PCRE版本,并且还需要一个\n\n替换字符串,以便不擦除所有的行尾,只擦除一个:

  $body = preg_replace("/\n\n+/", "\n\n", $body);

谢谢你让我走上正确的轨道。

< P>考虑所有三个断线序列:

preg_replace('/(?:\r\n|[\r\n]){2,}/', "\n\n", $str)

没有多少,一封电子邮件对发送电子邮件的用户来说是有价值的,它是web系统的一部分。我没有得到任何结果,直到我将表达式中的“a”改为“a”并替换。然后它就可以工作了,但是\n\n regex-take与php并不完全对等。我将继续搜索解决方案。在args中将“改为”后,这将返回由一分隔的所有行。\n更精简的正则表达式如下所示:preg\u replace(“/\n{2,}/”,“\n\n”,$body);谢谢KOGI。流线型的,嗯,它的代码稍微多了一些。它更快吗?最好添加检查\w-也许是\w?来说明何时有空格。添加随机换行符的人也可能会添加随机空格和制表符。也许你应该选择可接受的答案(tharkun's)因此,此问题被标记为已回答(并从未回答的队列中删除)。谢谢,在运行preg\u replace(“/\n\n+/”、“\n\n”、$body)之前,我确实运行了一个以unifier结尾的行;