在 Swift 正则表达式中使用 Unicode
Using Unicodes in Swift Regular Expression
我正在尝试匹配 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
- Match the character with the hex value hhhh
.
\Uhhhhhhhh
- Match the character with the hex value hhhhhhhh
. Exactly eight hex digits must be provided, even though the largest Unicode code point is \U0010ffff
.
\x{hhhh}
- Match the character with hex value hhhh
. From one to six hex digits may be supplied.
\xhh
- Match the character with two digit hex value hh
.
我正在尝试匹配 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
- Match the character with the hex valuehhhh
.
\Uhhhhhhhh
- Match the character with the hex valuehhhhhhhh
. Exactly eight hex digits must be provided, even though the largest Unicode code point is\U0010ffff
.
\x{hhhh}
- Match the character with hex valuehhhh
. From one to six hex digits may be supplied.
\xhh
- Match the character with two digit hex valuehh
.