NewLine文字の表現は、オペレーティングシステムごとに異なります。主に次のタイプがあります。
\ n :UNIX/LinuxおよびMacOSが使用するラインブレーク(LF)。
\ r \ n :Windowsで使用されるラインブレーク(CRLF)。
\ r :古いMac(Mac OS 9および以前のバージョン)が使用するLine Breaks(cr)。
プラットフォーム間でマルチラインテキストを処理する場合、出力またはさらに処理するときに問題を回避するために、さまざまなタイプの新しいライン文字を均一に処理する必要があります。
さまざまなニューラインのマルチラインテキストがあり、すべてのnewlinesを\ n (Unixスタイル)に統一したいとします。これは、 preg_filterを使用して実現できます。簡単な例を次に示します。
<span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Hello, World!\r\nThis is a test.\nAnother line.\rAnd one more line."</span></span><span>;
</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\r\n|\r|\n/'</span></span><span>;
</span><span><span class="hljs-variable">$replacement</span></span><span> = </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-variable">$cleaned_text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_filter</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$replacement</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">nl2br</span></span><span>(</span><span><span class="hljs-variable">$cleaned_text</span></span><span>);
</span></span>上記のコードでは、すべてのニューラインと一致する正規式/ \ r \ n | \ r | \ n /を定義します。 preg_filter関数を介して、すべてのNewline文字を\ nに置き換えます。
preg_filterとpreg_replaceの最大の違いは、通常の交換が失敗したときにnullを返すことですが、 preg_replaceは元の文字列を返します。したがって、Newlinesを扱う場合、 preg_filterは、テキストのNewlinesを簡潔に交換し、Newlinesが一致しない場合は変更が行われないようにするのに特に適しています。
たとえば、次のコードでは、 preg_replaceを使用して同じことを行います。
<span><span><span class="hljs-variable">$cleaned_text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$replacement</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span></span>両方の効果は同じですが、 preg_filterの返品値は、 NULLを返すことなく、通常の試合が成功したときに処理された結果のみを返すことを保証し、追加の判断とエラーの処理を回避します。
テキストに複数の行がある場合、ニューラインの処理は単に\ nに置き換えるだけではありません。次のような特定の条件に基づいて、テキストの形式を調整する必要がある場合があります。
余分なラインブレークを削除します。
特定の空白を維持します。
Newline文字の形式を正規化します。
たとえば、次のコードは、テキストで複数の連続したニューラインを削除し、1つの新しいラインのみを保持する方法を示しています。
<span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Hello, World!\n\n\nThis is a test.\n\nAnother line.\n\nAnd one more line."</span></span><span>;
</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\n+/'</span></span><span>;
</span><span><span class="hljs-variable">$replacement</span></span><span> = </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-variable">$cleaned_text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_filter</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$replacement</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">nl2br</span></span><span>(</span><span><span class="hljs-variable">$cleaned_text</span></span><span>);
</span></span>この例では、 / \ n+ / regexは1つ以上のニューラインと一致し、それらを別の新しいラインに置き換えます。このようにして、余分な空白の行をクリアし、テキストをきちんと保つことができます。
PHPでは、 PREG_FILTERは、特にマルチラインテキストと新しいライン文字を扱う場合、非常に実用的な機能です。正規表現を合理的に使用することにより、ラインブレークの標準化、不要な空白線の削除、特定の文字の交換など、テキストのさまざまな処理を簡単に実行できます。
preg_filter関数を正しく使用する方法を理解することは、コードの効率を改善するだけでなく、異なるオペレーティングシステムのラインブレークによって引き起こされる問題を回避することもできます。マルチラインのテキスト処理を実行するときは、新しいライン文字が期待を満たしているかどうかを確認し、テキスト形式での一貫性を確保するために正規表現を介して適切に処理することを忘れないでください。