正则表达式unicode在swift中不起作用 let regex1=“(\\ud83d\\udc68)” let regex2=“(\\ud83d[\\udc68-\\udc69])” “

正则表达式unicode在swift中不起作用 let regex1=“(\\ud83d\\udc68)” let regex2=“(\\ud83d[\\udc68-\\udc69])” “,swift,regex,unicode,emoji,nsregularexpression,Swift,Regex,Unicode,Emoji,Nsregularexpression,为什么第一行返回一个匹配,第二行不匹配? 如前所述,NSRegularExpression适用于Unicode代码点,(正常)JavaScript正则表达式适用于UTF-16代码单元 一些模式,如由有效的代理项对组成的“\\ud83d\\udc68”,可以优化为单个Unicode代码点U+1F468,但此功能没有很好的文档记录,因此您不应该依赖它,如示例”(\\ud83d[\\udc68])”中所示 我建议不要将代理项对与\uhhh一起使用,而是对非BMP字符使用\uhhhhhh(或\x{hh

为什么第一行返回一个匹配,第二行不匹配?

如前所述,
NSRegularExpression
适用于Unicode代码点,(正常)JavaScript正则表达式适用于UTF-16代码单元

一些模式,如由有效的代理项对组成的
“\\ud83d\\udc68”
,可以优化为单个Unicode代码点U+1F468,但此功能没有很好的文档记录,因此您不应该依赖它,如示例
”(\\ud83d[\\udc68])”
中所示


我建议不要将代理项对与
\uhhh
一起使用,而是对非BMP字符使用
\uhhhhhh
(或
\x{hhhh}

let regex1=“(\\U0001F468)”//或“(\\x{1F468})”
let regex2=“([\\U0001F468-\\U0001F469])”//或“([\\x{1F468}-\\x{1F469}])”

“您可以链接regex101。只需单击“共享”regex@chrisz谢谢,更新了链接。您知道它为什么不能与我的代码一起使用吗?Swift的哪个版本?@chrisz Swift 4.0原因可能是NSRegularExpression在Unicode标量上运行,而不是在UTF-16代码单元上运行。使用
regex2=“([\\ud83d\\udc68-\\ud83d\\udc69])”
您将获得预期的结果。是否有办法使
NSRegularExpression
在UTF-16代码单元上工作?我有一个巨大的正则表达式,需要处理UTF-16代码单元,重写那个正则表达式是不可行的。