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)

これで、 3回以上一致した\n\n場合、自動的にに置き換えられます。\n他の2つも同じです。

したがって、サーバーが使用していた改行文字はすべて、置換として使用されます。


もう1つ、上記の正規表現は1行の異なる改行と一致し、それを置き換えようとする場合があります。

例:-\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\n2 occurrencesそして、一致するものに置き換えます。

于 2012-12-21T11:30:49.933 に答える