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

时间:2012-12-21 11:24:04

标签: php regex newline

我正在尝试用2个换行符号替换超过 2个换行符。

我目前有:

$text = preg_replace('/(\r\n|\n|\r){3,}/', "\n\n", $text)

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

1 个答案:

答案 0 :(得分:9)

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

$text = preg_replace('/(\r\n|\n|\r){3,}/', "$1$1", $text)

如果\n\n匹配3次或更多次,它会自动替换为\n。其他两个相同。

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


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

例如: - \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)

现在它只匹配相同的连续换行符 - \n\n\n\n\n\r\r\r\r\r\r\n\r\n\r\n\r\n。并用匹配的2 occurrences替换。