我正在寻找像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
我没有看到任何内置内容,并且字符串替换将需要多次迭代才能完成工作。在我用一个小的递归字符串替换之前,我想看看你们有什么其他的建议。
我有一种奇怪的感觉,这个也有正则表达式。
答案 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不完全相同)。
[编辑]修正'到',因为它们似乎不起作用。不得不承认我刚刚在网络工具中测试了正则表达式。;)