我有一个$text = "你好😀😃😄 üäö$"
我想使用 xquery 从文本中删除表情符号。我该怎么做?
预期结果:“你好 üäö$”
我尝试使用:
replace($text, '[^\x00-\xFFFF]', '')
但没用。
提前致谢:)
最佳答案
要替换表情符号,您可以利用 XPath 对 Character Class Escapes 的支持,特别是类别和 block 转义,以匹配命名的 Unicode block :
replace("Hello 😀😃😄 üäö$", "\p{IsEmoticons}", "")
这将返回预期的结果:
Hello üäö$
“表情符号” block 不包含通常与“表情符号”关联的所有字符。例如,💜(紫心,U+1F49C),根据像 https://www.compart.com/en/unicode/U+1F49C 这样的网站可让您查找 Unicode 字符信息的,来自:
Miscellaneous Symbols and Pictographs, U+1F300 - U+1F5FF
这个 block 在 XPath 或 XQuery 处理器中不可用,因为它既没有在上面链接的 XML Schema 1.0 规范中列出,也没有在 Unicode block names for use in XSD regular expressions 中列出。 —符合 XML Schema 1.1 的 XPath 和 XQuery 处理器的 block 列表 required to support .
对于 XPath 或 XQuery 中不可用的 block 中的字符,您可以手动构造字符类。例如,给定上面的紫心字符,我们可以这样匹配:
replace("Purple 💜 heart", "[🌀-🗿]", "")
这将返回预期的结果:
Purple Heart
如果您想知道为什么我们使用 🌀
而不是 U+1F300
或 \x1F300
,那是因为, Michael Kay 在上面指出,“XQuery 使用 XML 转义约定 ,而不是 C/Java 转义约定
\xFFFF
。”
(我已根据其他非常有帮助的评论更新了答案。)
关于xml - 我如何使用 xquery 从文本中删除表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70070385/