絵文字の正規表現
絵文字はおおよそ以下の範囲になるそうです。
[\u{2600}-\u{27BF}\u{1F000}-\u{1FFFF}]
(※あくまでも「おおよそ」なので実際には ☆
が含まれていたり ⏩
が含まれていなかったりしますが、この記事の主題ではないため割愛します。)
これを UTF-16 に変換します。
UTF-16 の絵文字の正規表現
\u{1F000}-\u{1FFFF}
は下位12ビットが 0 または 1 なので、UTF-16の文字 2文字(サロゲートペアと呼びます)で以下のように表せます。(?
は 0 または 1 )
1文字目 : 0b_11011000_001111??
2文字目 : 0b_110111??_????????
この1文字目と2文字目は独立に(互いに依存しないような形で)正規表現で表せて、それぞれ [\uD83C-\uD83F]
と [\uDC00-\uDFFF]
となります。従って、絵文字を表す UTF-16 の正規表現は以下のようになります。
([\u2600-\u27BF]|[\uD83C-\uD83F][\uDC00-\uDFFF])
PowerRename で正規表現を使用してファイル名から絵文字を削除する
Dropbox で絵文字を含むファイルが管理できていなかったので、それを削除したいと思います。
多分 Windows のファイルシステムがそうだからだと思うのですが、PowerRename では UTF-16 での文字コードでファイル名のりネームができるようだったのでやってみます。
PowerRename を使用し、以下の設定で置換を行いました。
置換対象文字列 : ([\u2600-\u27BF]|[\uD83C-\uD83F][\uDC00-\uDFFF])
正規表現を使用 : ON
すべての出現箇所を一致させる : ON
置換の候補 : ""
(何も入力しない)
参考:合字 と ZWJ (zero width joiner)
ただし、肌の色が指定された絵文字 (ex: 👍🏽
) など、上記の範囲で表せない絵文字もあり、ゴミが残ってしまうこともあります。
ただ、「絵文字」は削除できたので、一旦目的は達成したことにして、このあたりは気が向いたら調べたいと思います。
おまけ
Windows10 + Chromium (Twemoji 無し) 環境での絵文字一覧
- 0x2000 - 0x2FFF
- 0x1F000 - 0x1FFFF
余談
ここまで書いて気付いたのですが、今回のように Dropbox を使用したいというケースであれば単に「サロゲートペアで表される文字」を削除すれば良かっただけだったっぽいので、[\u2600-\u27BF]
を削除する必要性や絵文字の範囲について思いを巡らせる必要性はなかったかもしれません。
その場合、もし、U+10000 から U+10FFFF までを削除したいのであれば、(UTF-16 において)削除対象の文字は以下のようになります。
[\uD800-\uDBFF][\uDC00-\uDFFF]