例題
"モノ\r\nジ\rトリ\nテトラ"
を
"モノ\nジ\nトリ\nテトラ"
に置き換えたい。つまり \r\n
, \r
, \n
をすべて \n
に統一したいです。
結論
"モノ\r\nジ\rトリ\nテトラ".gsub(/\R/, "\n")
#=> "モノ\nジ\nトリ\nテトラ"
方法
失敗例
"モノ\r\nジ\rトリ\nテトラ".gsub(/\r|\n/, "\n")
#=> "モノ\n\nジ\nトリ\nテトラ"
\r\n
を \n
に変換したいのに \n\n
になってしまいます
成功例 1 (愚直な方法)
"モノ\r\nジ\rトリ\nテトラ".gsub(/\r\n|\r|\n/, "\n")
#=> "モノ\nジ\nトリ\nテトラ"
# scivola さんにコメントで教えて頂いた方法
"モノ\r\nジ\rトリ\nテトラ".gsub(/\r\n?/, "\n")
#=> "モノ\nジ\nトリ\nテトラ"
成功例 2 (ベストな方法)
"モノ\r\nジ\rトリ\nテトラ".gsub(/\R/, "\n")
#=> "モノ\nジ\nトリ\nテトラ"
\R
は改行コードを表すメタ文字です。
で言及されています。
文字列の中には、CR LF のように、複数の文字一続きで1つの意味を表す ようなものが存在します。そのような文字列にマッチするような メタ文字列として以下が存在します。
\R 改行 (?>\x0D\x0A|[\x0A-\x0D\u{85}\u{2028}\u{2029}]) (Unicode 以外では (?>\x0D\x0A|[\x0A-\x0D]) になります)