我有一个$text=“你好????????????üäö$”
我想使用以下命令从文本中删除表情符号xquery。我怎样才能做到这一点?
预期结果:“Hello üäö$”
我尝试使用:
replace($text, '[^\x00-\xFFFF]', '')
但没有用。
提前致谢 :)
要替换表情符号,您可以利用 XPath 的支持字符类转义 https://www.w3.org/TR/xmlschema-2/#cces,特别是类别和块转义,以匹配命名的 Unicode 块:
replace("Hello ???????????? üäö$", "\p{IsEmoticons}", "")
这将返回预期结果:
Hello üäö$
“表情符号”块不包含通常与“表情符号”相关的所有字符。例如,????(紫心勋章,U+1F49C),根据类似网站https://www.compart.com/en/unicode/U+1F49C https://www.compart.com/en/unicode/U+1F49C可以让你查找 Unicode 字符信息,来自:
各种符号和象形文字,U+1F300 - U+1F5FF
该块在 XPath 或 XQuery 处理器中不可用,因为它既没有在上面链接的 XML Schema 1.0 规范中列出,也没有在用于 XSD 正则表达式的 Unicode 块名称 https://www.w3.org/TR/xsd-unicode-blocknames/— 符合 XML Schema 1.1 的 XPath 和 XQuery 处理器的块列表需要支持 https://www.w3.org/TR/xmlschema11-2/#cces-blockesc.
对于 XPath 或 XQuery 中不可用的块中的字符,您可以手动构造字符类。例如,给定上面的紫心勋章字符,我们可以按如下方式进行匹配:
replace("Purple ???? heart", "[🌀-🗿]", "")
这将返回预期结果:
Purple Heart
如果您想知道我们为什么使用🌀
并不是U+1F300
or \x1F300
,这是因为,正如 Michael Kay 上面指出的,“XQuery 使用 XML 转义约定
,不是 C/Java 转义约定\xFFFF
."
(我已经更新了答案以回应其他非常有用的评论。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)