正規表現を使用してiOS 6から絵文字を解析することに頭を悩ませようとしています。
絵文字の出現ごとにスパン可能なものに置き換えたいと思います。ここで、絵文字コードをリソース内の画像に置き換えます。これまでのところ、私はそれを機能させることができませんでした。
私がこれまでに持っているもの:
static public Spannable getSpannable(String str) {
Spannable spannable = spannableFactory.newSpannable(str);
char c = str.charAt(0);
Pattern p = Pattern.compile("([\ud83d\ude01-\ud83d\ude45])");
Matcher m = p.matcher(str);
while (m.find()) {
if (mSpannables.get(m.group()) == null) {
Bitmap b = BitmapFactory.decodeResource(myApp.getAppContext().getResources(), R.drawable.u0033);
ImageSpan imp = new ImageSpan(Bitmap.createScaledBitmap(b, 70, 70, false));
mSpannables.put(m.group(), imp);
}
spannable.setSpan(mSpannables.get(m.group()), m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return spannable;
}
(これはまだ本番環境に対応していないことに気付きました。関数が呼び出されるたびにパターンを作成することはパフォーマンス キラーです。正規表現のマッチングを機能させようとしているだけです。)
現在の正規表現は少数の絵文字に一致しています。できるだけ因数分解して、完全な絵文字文字セットを取得したいと思います。
因数分解しようとすると、もううまくいきません。たとえば、これは機能しません。
"\ud83d[\udc00-\uddff]"
試してみるとさらに少ない
"[\ue000-\uf8ff]|\ud83c[\udf00-\udfff]|\ud83d[\udc00-\uddff]"
(機能している場合)これは、文字セットに存在するすべての絵文字に一致するはずです。