1

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

我目前有:

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

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

4

1 回答 1

9

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

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

现在它会自动替换为\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)

现在它将只匹配相同的连续换行符 - \n\n\n\n\n\r\r\r\r\r\r\n\r\n\r\n\r\n。并替换2 occurrences为任何匹配的内容。

于 2012-12-21T11:30:49.933 回答