删除多余的行返回

时间:2009-04-08 05:40:36

标签: 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

我没有看到任何内置内容,并且字符串替换将需要多次迭代才能完成工作。在我用一个小的递归字符串替换之前,我想看看你们有什么其他的建议。

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

5 个答案:

答案 0 :(得分:10)

function str_squeeze($body) {
    return preg_replace("/\n\n+/", "\n\n", $body);
}

答案 1 :(得分:3)

你需要多少文字才能做到这一点?如果它小于大约100k,那么您可能只需使用简单搜索并替换正则表达式(搜索/\n+/之类的内容并替换为\n

另一方面,如果你需要经过几兆字节的数据,那么你可以逐个字符地解析文本,将输入复制到输出,除非遇到多个换行符,在这种情况下你只需复制一个换行符并忽略其余部分。

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

答案 2 :(得分:3)

最后设法得到它,需要preg所以你在php中使用PCRE版本,并且还需要一个\ n \ n替换字符串,以便不擦除所有行结尾而是一个:

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

感谢您让我走上正轨。

答案 3 :(得分:3)

考虑所有三个换行符序列:

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

答案 4 :(得分:2)

以下正则表达式应该删除多个换行符,同时忽略单个换行符,这可以按照您的定义:

ereg_replace("\n\n+", "\n\n", $string);

您可以使用此PHP Regular Expression test tool进行测试,这非常方便(但因为它似乎与PHP不完全相同)。

[编辑]修正'到',因为它们似乎不起作用。不得不承认我刚刚在网络工具中测试了正则表达式。;)