swift - 在 Swift 正则表达式中使用 Unicode
问题描述
我正在尝试在 Swift 中匹配字符串中的正则表达式模式。当我在正则表达式模式中使用实际字符时,它按预期工作。但是,我在正则表达式中使用相同字符的 Unicode 版本,它不能按预期工作。你能帮我解决这里有什么问题吗?我需要使用带有 Unicode 的正则表达式。
代码:
var input = "一" // u{4E00}
extension String {
var patternMatchesWithUnicode: Bool {
//doesnt work
return self.range(of: #"[\u{4E00}-\u{9FFF}]"#, options: .regularExpression) != nil
}
var patternMatchesWithString: Bool {
//works
return self.range(of: #"[一-鿿]"#, options: .regularExpression) != nil
}
}
print(input.patternMatchesWithString)
print(input.patternMatchesWithUnicode)
输出:
false
true
解决方案
您可以使用
extension String {
var patternMatchesWithUnicode: Bool {
return self.range(of: #"[\u4E00-\u9FFF]"#, options: .regularExpression) != nil
}
}
这些也将起作用:
return self.range(of: #"[\x{4E00}-\x{9FFF}]"#, options: .regularExpression) != nil
return self.range(of: #"[\U00004E00-\U00009FFF]"#, options: .regularExpression) != nil
Swift 正则表达式风格是ICU,请参阅文档页面的摘录:
\uhhhh
- 将字符与十六进制值匹配hhhh
。
\Uhhhhhhhh
- 将字符与十六进制值匹配hhhhhhhh
。必须提供八位十六进制数字,即使最大的 Unicode 代码点是\U0010ffff
.
\x{hhhh}
- 将字符与十六进制值匹配hhhh
。可以提供一到六个十六进制数字。
\xhh
- 将字符与两位十六进制值匹配hh
。
推荐阅读
- python - 如何编码以修复检测到的致命错误:使用 auto-py-to-exe 将 python 代码编译为 exe 文件后无法执行脚本 BoxDetection?
- firebase - 如何通过颤振从 Firebase 获取用户电子邮件?
- javascript - 为什么不使用函数输出不同
- python - 我们如何从所有记录的列中访问特定元素?
- angular - 在 Apollo Angular 中使用新的身份验证令牌重试失败的 graphql 请求
- javascript - toLocaleString 给出错误的 12 小时时间
- python - 在第一个“或”的 Vs Code 中出现无效的语法错误
- python-3.x - 无法将情节发送到 http://127.0.0.1:63342
- postgresql - 如何在PostgreSQL的where子句中传递多个参数
- angular - Firebase 分别为每个产品设置新数据