1. ホーム
  2. regex

[解決済み] [Solved] Match linebreaks - \n or \r?

2022-04-04 22:19:24

質問

執筆中 この回答 を使わず、改行のみでマッチングさせる必要がありました。 s -フラグ ( dotall - ドットは改行にマッチします)。

通常、正規表現のテストに使用されるサイトでは \n または \r\n .

気づいたこと

  • Regex101 は改行コードにのみマッチします。 \n

    ( - 削除 \r とマッチします)

  • RegExr は改行にマッチします。 どちらも オン \n また について \r\n

    を除いて、改行と一致させるものが見当たりません。 m -フラグと \s

    ( )

  • Debuggexはさらに違う挙動をします。

    この例 にのみマッチします。 \r\n 一方

    ここで にのみマッチします。 \n 同じフラグとエンジンが指定されている場合

を十分に理解しています。 m -フラグ(マルチライン - は ^ は、先頭と $ を行末に設定する)ことができますが、時にはこのようなオプションがないこともあります。同じように \s タブやスペースにもマッチするからです。

私が考えたのは、ユニコードの改行文字( \u0085 )は成功しませんでしたので。

  1. 改行でのマッチを (できれば使用言語に関係なく) 正規表現に統合するフェイルセーフな方法はありますか?
  2. 上記のサイトが異なる挙動をするのはなぜか(特にDebuggexは、一度だけ \n に一度だけ、そして \r\n )?

解決方法は?

逆にお答えします。

2) \r\n ここに掲載するよりもはるかに完成度の高いこの質問を参考にさせていただきました。 ୧⃛(๑⃙⃘◡̈๑⃙⃘)

長い話になりますが、Linux では \n は改行、Windowsは \r\n と古いMacの \r . つまり、改行の書き方は複数あるのです。2番目のツール(RegExr)は、例えば、単一の \r .

1) [\r\n]+ はうまくいきますが、複数の連続した改行にもマッチしてしまいます。 (\r\n|\r|\n) の方がより正しい。