我正在尝试使用正则表达式从 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]"
它应该(如果有效)匹配字符集中存在的每个表情符号。