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

标签 xml xquery xquery-3.0

我有一个$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/

相关文章:

java - 使用 Commons Digester 解析成 HashMap

sql - 如何将 xPath 指向 SQL Server 中 select 语句中的值?

xml - 为什么 XQuery 表达式返回错误的元素计数?

sql-server - 将 XML 转换为 SQL 列和值

xml - 从内部调用模板 <xsl :for-each>

xml - 哪种XQuery表达式将返回找到的每个节点的XPath?

xml - 从 XQuery 3.0 中的多个输入返回多个值?

xml - 返回表达式中的XQuery变量未解析其值

javascript - 在 Javascript 中循环创建 (xml) 字符串

xml - 当 XSLT for-each 处于循环中时。如何根据其他 XML 值向该 XML 添加属性或节点。使用 XSLT