質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

5223閲覧

改行にマッチする正規表現

Pc_Felith

総合スコア22

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2017/03/09 02:33

Perl 風または POSIX 拡張の正規表現を想定します。

改行にマッチする正規表現を「改行 正規表現」でググると
\r\n|\r|\n というのはヒットしますが
\r\n?|\n は見当たりません。
\r\n?|\n ではまずい理由があるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

判りにくい(直感的でない)からではないかと思います。

”\r\n?|\n”では、 \r\n? を 「\r もしくは \r\n」と解釈して、更に「(\r もしくは \r\n) もしくは \n」と解釈しなくてはなりません。
"\r\n|\r|\n"なら、すぐに「\r\n もしくは \r もしくは \n」と判りますから。

投稿2017/03/09 02:51

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Pc_Felith

2017/03/10 07:26

(メンテする)人にとって理解しづらいということですね。 機械の処理効率を突き詰めると `\r\n?|\n` などになりますが、確かに元をたどれば `\r\n|\r|\n` でした。 ありがとうございます。
guest

0

ベストアンサー

\r\n?|\nではまずい理由があるのでしょうか?

ないと思います。

\r\n?\r\n|\rがマッチするものと同じものにマッチするはずですから、\r\n?|\n\r\n|\r|\nがマッチするものと同じものにマッチします。

さらに、\r\n|\n|\r\n|\r\n|\r\r?\n|\r\r??\n|\r (??はPerl拡張) なども、\r\n|\r|\nがマッチするものと同じものにマッチするはずです。

どれでないといけないということはないと思います。\r\n|\r|\nがよく使われるのは、「3種類の改行のいずれにもマッチする」ということが読み取りやすいためではないでしょうか。


ちなみに、次のようなものは期待される結果になりません。

  • \r|\r\n|\n
    \r\nにマッチしない。
  • \r\n??|\n (??はPerl拡張)
    同じく、\r\nにマッチしない。
  • [\r\n]+
    複数の改行にまとめてマッチする。

なおちなみに、アプリケーションによっては上述の3種以外の改行を使っている場合があります。U+0085 (NEL) や、\r\r\nのようなものが使われることがあまりす。ですから、対象のアプリケーションによっては上述の正規表現が適用できない場合もあります。

投稿2017/03/09 03:19

編集2017/03/09 03:21
ikedas

総合スコア4317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Pc_Felith

2017/03/10 07:43

様々な正規表現の例をありがとうございます。 `\r\n|\r|\n` が見つかりやすいのは、人が読みやすい・思いつきやすいというのが大きそうですね。 あと、他に改行コード(?)があるのは初耳でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問