$string = preg_replace('~\R~u', "\r\n", $string);
すべての Unicode 改行ではなく、CRLF スタイルの改行だけを置き換えたい場合は、次を使用します。
$string = preg_replace('~(*BSR_ANYCRLF)\R~', "\r\n", $string);
\R
これらの改行に一致u
し、入力文字列を UTF-8 として扱うための修飾子です。
PCRE ドキュメントから:
\R
一致するもの
デフォルトでは、パターン内のシーケンス \R は、行末シーケンスとして選択されているものは何でも、任意の Unicode 改行シーケンスと一致します。指定すれば
--enable-bsr-anycrlf
\R が CR、LF、または CRLF のみに一致するようにデフォルトが変更されました。PCRE のビルド時に選択されたものは、ライブラリ関数が呼び出されたときにオーバーライドできます。
と
改行シーケンス
デフォルトでは、文字クラスの外では、エスケープ シーケンス \R は任意の Unicode 改行シーケンスと一致します。非 UTF-8 モードでは、\R は次と同等です。
(?>\r\n|\n|\x0b|\f|\r|\x85)
これは「アトミック グループ」の例であり、その詳細を以下に示します。この特定のグループは、CR の後に LF が続く 2 文字のシーケンス、または単一文字の LF (ラインフィード、U+000A)、VT (垂直タブ、U+000B)、FF (フォームフィード、U+000C)、CR のいずれかに一致します。 (改行、U+000D)、または NEL (次の行、U+0085)。2 文字のシーケンスは、分割できない 1 つの単位として扱われます。
UTF-8 モードでは、コードポイントが 255 より大きい 2 つの文字が追加されます: LS (行区切り、U+2028) と PS (段落区切り、U+2029)。これらの文字を認識するために、Unicode 文字プロパティのサポートは必要ありません。
コンパイル時またはパターンの一致時にオプション PCRE_BSR_ANYCRLF を設定することにより、(Unicode 行末の完全なセットではなく) CR、LF、または CRLF のみに一致するように \R を制限することができます。(BSR は「バックスラッシュ R」の省略形です。) これは、PCRE のビルド時にデフォルトにすることができます。この場合、PCRE_BSR_UNICODE オプションを介して他の動作を要求できます。次のいずれかのシーケンスでパターン文字列を開始することにより、これらの設定を指定することもできます。
(*BSR_ANYCRLF) CR, LF, or CRLF only
(*BSR_UNICODE) any Unicode newline sequence
これらは、デフォルトと、pcre_compile() または pcre_compile2() に指定されたオプションをオーバーライドしますが、pcre_exec() または pcre_dfa_exec() に指定されたオプションによってオーバーライドできます。これらの特別な設定は Perl と互換性がなく、パターンの最初でのみ認識され、大文字でなければならないことに注意してください。それらが複数存在する場合は、最後のものが使用されます。これらは、改行規則の変更と組み合わせることができます。たとえば、パターンは次のように開始できます。
(*ANY)(*BSR_ANYCRLF)
(*UTF8) または (*UCP) 特殊シーケンスと組み合わせることもできます。文字クラス内では、\R は認識されないエスケープ シーケンスとして扱われるため、既定では文字 "R" と一致しますが、PCRE_EXTRA が設定されている場合はエラーが発生します。