如何使用 xquery 从文本中删除表情符号

Pre*_*r J 3 xml xquery xquery-3.0

我有一个$text = "Hello \xc3\xbc\xc3\xa4\xc3\xb6$"

\n

我想使用xquery从文本中删除表情符号。我怎样才能做到这一点?

\n

预期结果:“你好\xc3\xbc\xc3\xa4\xc3\xb6$”

\n

我尝试使用:

\n
replace($text, '[^\\x00-\\xFFFF]', '')\n
Run Code Online (Sandbox Code Playgroud)\n

但没有用。

\n

提前致谢 :)

\n

joe*_*wiz 5

要替换表情符号,您可以利用 XPath 对字符类转义(特别是类别和块转义)的支持来匹配命名的 Unicode 块:

\n
replace("Hello  \xc3\xbc\xc3\xa4\xc3\xb6$", "\\p{IsEmoticons}", "")\n
Run Code Online (Sandbox Code Playgroud)\n

这将返回预期结果:

\n
Hello  \xc3\xbc\xc3\xa4\xc3\xb6$\n
Run Code Online (Sandbox Code Playgroud)\n

“表情符号”块不包含通常与“表情符号”相关的所有字符。例如,(Purple Heart, U+1F49C),根据https://www.compart.com/en/unicode/U+1F49C等可让您查找 Unicode 字符信息的网站,来自:

\n
\n

各种符号和象形文字,U+1F300 - U+1F5FF

\n
\n

此块在 XPath 或 XQuery 处理器中不可用,因为它既未在上面链接的 XML Schema 1.0 规范中列出,也不在用于 XSD 正则表达式的 Unicode 块名称中\xe2\x80\x94a XPath 和需要符合 XML Schema 1.1 的 XQuery 处理器才能支持.

\n

对于 XPath 或 XQuery 中不可用的块中的字符,您可以手动构造字符类。例如,给定上面的紫心勋章字符,我们可以按如下方式进行匹配:

\n
replace("Purple  heart", "[🌀-🗿]", "")\n
Run Code Online (Sandbox Code Playgroud)\n

这将返回预期结果:

\n
Purple  Heart\n
Run Code Online (Sandbox Code Playgroud)\n

如果您想知道为什么我们使用🌀and 而不是U+1F300or \\x1F300,这是因为,正如 Michael Kay 上面指出的,“XQuery 使用 XML 转义约定,而不是 C/Java 转义约定\\xFFFF”。

\n

(我已经更新了答案以回应其他非常有用的评论。)

\n