\R は、広い範囲で、改行になる文字すべてにマッチしてくれる


$str = preg_replace('/\r?\n|\r/', '<br>', $str);

↑こんなことしなくても、↓これでいいんだね。。
$str = preg_replace('/\R/', '<br>', $str);


ただし、どの正規表現ライブラリで使えるかは不明でした…。
どうやらPHPでは使えるらしい、ということで。

あと、参照元はrubyのネタなので、rubyでも使えるのでしょう。