文字列に \n\r が含まれているときに、正規表現が 1 つではなく 2 つの br タグを与える理由を知りたいだけですか?
\n、\r、\r\n、および \n\r を次のものに置き換えようとしています。
$string="testing \n\r testing2";
$result=preg_replace("/\r?\n|\n?\r/", "<br />", $string);
echo "$result";
ありがとう
文字列に \n\r が含まれているときに、正規表現が 1 つではなく 2 つの br タグを与える理由を知りたいだけですか?
\n、\r、\r\n、および \n\r を次のものに置き換えようとしています。
$string="testing \n\r testing2";
$result=preg_replace("/\r?\n|\n?\r/", "<br />", $string);
echo "$result";
ありがとう
nl2br
同じことを実現するネイティブ関数を使用してみませんか
$string="testing \n\r testing2";
echo nl2br($string);
複数行修飾子を追加する必要があります。
/\r?\n|\n?\r/ms
それで:
preg_replace("/\r?\n|\n?\r/ms", "<br />", $string);
あなたの式は期待どおりに機能しています。もう一度見てください:
/\r?\n|\n?\r/
代替 ( ) はより長い一致|
を支持するべきだと考えているようですが、そうではありません。Alternation は、 firstに一致するものと一致し、左から右の優先順位が付けられます。 \n\r
\r
したがって、 に遭遇する\n\r
と、\n
は に一致し\r?\n
て に置き換えられ<br />
、\r
は に一致し\n?\r
て再び置き換えられます。
代わりに欲しいのは
/\r\n|\n\r|\r|\n/
\r\n
でも一般的には使わないと思うので
/\n\r?|\r/
十分なはずです。