正規表現で空白をマッチさせるときは\sじゃなくて\hのほうが良いのかもしれない。
正規表現で空白文字とマッチさせるときは\sを使用することが多いと思いますが、本当に求めているものは\hなのかもしれません。
- \s 空白文字: [\t\n\x0B\f\r]
- \h 水平方向の空白文字: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\sはasciiで定義されている空白っぽい文字(改行含む)にマッチしますが、\hはUnicodeで定義されている空白っぽい文字(改行を含まない)にマッチします。 歴史的経緯で\sを使う人も多いですが、改行含んでマッチさせたい場合なんてほとんどないのだから\hを使いましょう。
Javaの正規表現の一覧は以下から(※ほぼPerl互換)
なお:
Java に限らず、\h の扱いが言語ごとに違うみたいです 😰
— YujiSoftware (@YujiSoftware) 2023年12月23日
Java … Unicode の空白
Perl … Unicode の空白(\s と等価?)
Ruby … 16進数字 [0-9a-fA-F]
Go … 対応しない
C# … 対応しない(ただし、\s が Unicode の空白にもマッチ)