PHP正则表达式将4个或更多的换行符压缩为3个换行符

时间:2019-09-09 14:50:34

标签: php regex

感谢您的帮助!我已经在互联网上搜索了所有内容,但找不到我想要的答案。

我具有评论功能,但我不希望用户句子之间的空行超过2条。示例:

1st Line - 1 break
2nd Line - 2 breaks

3rd Line - 3 breaks


4th Line - 4 breaks



5th Line - 5 breaks




6th Line

应该凝结为:

1st Line - 1 break
2nd Line - 2 breaks

3rd Line - 3 breaks


4th Line - 4 breaks


5th Line - 5 breaks


6th Line

该解决方案还需要删除由空格和制表符包围的换行符,以使用户无法绕过换行符冷凝。

我尝试了以下操作,但最终只删除了所有换行符,除了句子后的换行符:

$text = preg_replace("/(\s*\R\s*)/", "\n", $text);

$text = preg_replace("/\R{3,}/", "\n\n\n", $text);


Results in:

1st Line - 1 break
2nd Line - 2 breaks
3rd Line - 3 breaks
4th Line - 4 breaks
5th Line - 5 breaks
6th Line

任何帮助将不胜感激!感谢您抽出宝贵时间查看我的问题。祝你有美好的一天!

1 个答案:

答案 0 :(得分:0)

您可以使用此php正则表达式:

$str = preg_replace('/(?:\h*\R){3,}/', '\n\n\n', $str);

RegEx Demo

此正则表达式使用匹配

  • (?:\h*\R):匹配0个或多个水平空格,后跟任意换行符。 (?:...)适用于非捕获组。
  • (?:\h*\R){3,}:匹配3个或更多出现的分组表达式