用2个新行替换超过x个新行的数量

Bre*_*ett 1 php regex newline

我试图取代超过 2个新行字符2个新行字符.

我目前有:

$text = preg_replace('/(\r\n|\n|\r){3,}/', "\n\n", $text)
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但是新行并不总是\n字符,所以我想知道是否有我可以用正确的新行字符替换它?

Roh*_*ain 9

您可以使用back reference替换匹配的完全相同的换行符: -

$text = preg_replace('/(\r\n|\n|\r){3,}/', "$1$1", $text)
Run Code Online (Sandbox Code Playgroud)

现在它将自动替换\n\n,如果\n匹配3次或更多次.其他两个相同.

因此,无论您的服务器使用什么换行符,都将被用作替代品.


还有一件事是,您的上述正则表达式可能会匹配单行中的不同换行符并尝试替换它.

例如: - \n\r\r\n将匹配并替换为\r\n\r\n.如果你想确保只匹配类似的换行符,例如: - \n\n\n,并替换为\n\n,那么你需要将你的正则表达式改为: -

$text = preg_replace('/(\r\n|\n|\r)$1{2,}/', "$1$1", $text)
Run Code Online (Sandbox Code Playgroud)

现在,它只会匹配的连续相同的换行符- \n\n\n\n\n,\r\r\r\r\r\r\n\r\n\r\n\r\n.并替换2 occurrences任何匹配的.