0

文字列に \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";

ありがとう

4

4 に答える 4

1

nl2br同じことを実現するネイティブ関数を使用してみませんか

$string="testing \n\r testing2";
echo nl2br($string);
于 2013-05-22T16:25:26.523 に答える
0

複数行修飾子を追加する必要があります。

/\r?\n|\n?\r/ms

それで:

preg_replace("/\r?\n|\n?\r/ms", "<br />", $string);
于 2013-05-22T16:25:23.570 に答える
0

あなたの式は期待どおりに機能しています。もう一度見てください:

/\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/

十分なはずです。

于 2013-05-22T17:07:04.067 に答える