0216おれさま ◆6CTEZS59O00a
2018/10/28(日) 03:59:48.27\n
\s
この2つはそもそも種類が違う
\n は改行で、\s は空白だから違うのは当たり前とかそういう意味じゃない
属しているグループが全然違う
\n は \t \r などと同じ「エスケープシーケンス」
\s は \w \d などと同じ「あらかじめ定義されている文字クラス」
\n
" " の中にそのまま書いただけで \n という文字そのものではなく、
「改行」として認識される
\s
" " の中に書いたときに 「 \s という文字列として認識」 された場合に
初めて特殊な意味、ここでは「空白」として認識される
もう少し詳しく書く
"\s" と書いてしまうと、\ を特殊な記号として認識してしまう
そのため、これはエスケープシーケンスの一種だな、と誤解してしまう
しかしエスケープシーケンスには \s は存在しないため、エラーとなる
「 \s という文字列として認識」 させるには \ がもつ特殊な機能を消し去って
\ そのままの文字列として認識させる必要がある
そこで、\ の前にもう一つエスケープのための \ をつける
こうすることで、 「 \s という文字列として認識」 してもらえる
つまり、あらかじめ定義された文字列を matches などで使う時は、総じて \\s \\d \\w
のような書き方をしなければならないということになる