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