ルモーリン

絵文字を含む文字列を分割~解説編~

投稿: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があるのでソースを見てご利用ください。