絵文字を含む文字列を分割~解説編~
投稿:2019-07-27
このサービスの解説です。
絵文字を含む文字列を分割 - サービス
…2行になった(そして3行)。
Perlの正規表現には1文字にマッチするメタ文字として「\X」があります。 Perl5.28以降は絵文字を含む「1文字」にマッチするようになりました(5.28.2で確認済)。 もちろん普通(?)の1文字にもマッチしますから絵文字かどうかは分かりません。 そこでツイッター社の絵文字ライブラリからアーカイブを拝借、「絵文字のファイルがあるコードポイントの並びは絵文字」と判定します。 コードはこんな感じです。
# $text(対象文字列) → @char(分割した文字情報)
for ($text =~ /\X/g) {
# 文字毎に分割(コードポイントは複数)
my $char;
$char->{char} = $_;
# コードポイント毎に分割、16進表記
my @char_hex = map {sprintf "%x", ord} split //;
$char->{hex} = \@char_hex;
# ツイッター社の絵文字ライブラリに同名の画像ファイルがあれば絵文字
my $emoji_hex = join "-", @char_hex;
$char->{is_emoji} = -e "/??????????/emoji/$emoji_hex.png" ? 1 : 0;
push @char, $char;
}
JSONで文字列を投げると文字単位に分割、絵文字フラグも付けて返す便利なAPIになってます。 サービスのページ内にJavaScriptがあるのでソースを見てご利用ください。