PHP合并一行中的换行符数量,并在必要时减少它


PHP Merge the number of line-breaks in a row and reduce it if necessary?

我有一个文本区,用户可以在这里用PHP提交帖子。例如,我想检查一行中换行符的数量,并在必要时减少它。

原件:

Hello'n
'n'n'n'n'n'n'n'n'n'n'n'n'n
Goodbye

我最终想要什么:

Hello'n
'n
Goodbye

所以基本上我想要一行最多2个换行符。我如何在PHP中实现这一点?

谢谢你的帮助。

PCRE:

preg_replace('/'n{3,}/m', "'n'n", $text);

我会做一个循环来替换

$data = "Hello'n'n'n'n'n'n'n'n'n'n'n'n'nGoodbye";
while(($newdata = str_replace("'n'n'n", "'n'n", $data) != $data){
    $data = $newdata;
}

只要有可能,这将用2取代3。

请记住,您可能也需要用替换所有内容,因为您的输入永远不可能是完美的。这也没有考虑到n之间存在空白的可能性。

为了添加到tandu的响应中,这种变化也考虑了回车:

preg_replace(array('/'r/m','/'n{3,}/m'), array("'n","'n'n"), $text);

首先将'r的序列转换为'n的序列,使'r'n序列还原为'n'n序列。然后,顺序'n的筛选器完成该作业。