gpt4 book ai didi

android - 使用正则表达式解析 iOS 6 表情符号

转载 作者:太空狗 更新时间:2023-10-29 15:09:52 24 4
gpt4 key购买 nike

我正在尝试使用正则表达式从 iOS 6 解析表情符号。

我希望每次出现的表情符号都被替换为 spannable,我用资源中的图像替换表情符号代码。到目前为止,我还没能让它发挥作用。

到目前为止我所拥有的:

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;
}

(我意识到这还没有准备好生产;每次调用函数时都创建模式是性能 killer 。我只是想让正则表达式匹配工作。)

当前正则表达式匹配少量表情符号。我想尽可能地分解它,并在其中获得完整的表情符号字符集。

当我尝试分解时,它就不再起作用了。例如,这不起作用:

"\ud83d[\udc00-\uddff]"

当我尝试时甚至更少

"[\ue000-\uf8ff]|\ud83c[\udf00-\udfff]|\ud83d[\udc00-\uddff]"

它应该(如果工作)匹配字符集中存在的每个表情符号。

最佳答案

Java 正则表达式引擎的行为类似于一个好的 Unicode 正则表达式引擎,因为它匹配 Unicode 代码点,而不是 UTF-16 chars。您似乎正在编写预期后一种行为的模式。

不要这样做 - 相反,当在 Java 正则表达式中指定星光层字符时,使用十六进制表示法表示完整的代码点值。例如,要匹配 CLAPPING HANDS SIGN,请使用 \x{1f44f}

因此,您的最后一个正则表达式(将匹配 BMP 私有(private)使用区域、杂项符号和象形文字 block 、表情符号 block 、运输和 map 符号 block 、炼金术符号 block 以及 SMP 中相当多的未分配空间此外 - 你确定你需要匹配所有这些吗?)应该呈现为:

"[\ue000-\uf8ff]|[\\x{1f300}-\\x{1f7ff}]"

关于android - 使用正则表达式解析 iOS 6 表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com