在 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.