我正在尝试用2个换行符号替换超过 2个换行符。
我目前有:
$text = preg_replace('/(\r\n|\n|\r){3,}/', "\n\n", $text)
哪个工作正常,但新行并不总是\n
个字符,所以我想知道是否有可能用正确的新行字符替换它?
答案 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
替换。