gpt4 book ai didi

regex - NSRegularExpression 中的 Unicode 字符 (UTF-32) 字符串编码

转载 作者:行者123 更新时间:2023-11-28 10:20:53 32 4
gpt4 key购买 nike

我正在用 Swift 为 Turtle 格式的 RDF 数据编写一个解析器。 Turtle Grammar 将模式 PN_CHARS_BASE 定义为

[163s]  PN_CHARS_BASE ::= [A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

(参见 W3C Turtle recommendation)。

模式 [#x10000-#xEFFFF] 中的最后一组超出了 UTF-16 字符串编码的范围。这里需要UTF-32。

此模式用于匹配,例如foaf:name中的foaf前缀字符串中前缀的第一个字符,此处不允许使用数字.

我想使用 NSRegularExpression 来解析海龟文件。因此,为了匹配 PN_CHARS_BASE 模式,我有以下测试代码:

    let PN_CHARS_BASE = "[A-Z]|[a-z]|[\\u00C0-\\u00D6]|[\\u00D8-\\u00F6]|[\\u00F8-\\u02FF]|[\\u0370-\\u037D]|[\\u037F-\\u1FFF]|[\\u200C-\\u200D]|[\\u2070-\\u218F]|[\\u2C00-\\u2FEF]|[\\u3001-\\uD7FF]|[\\uF900-\\uFDCF]|[\\uFDF0-\\uFFFD]|[\\u10000-\\uEFFFF]"
do {
let teststr = "9"
let regex = try NSRegularExpression(pattern: PN_CHARS_BASE, options: [])
let matches = regex.matchesInString(teststr, options: [], range: NSMakeRange(0, teststr.characters.count)) as Array<NSTextCheckingResult>
} catch {

}

当我通过调试器运行它时,正则表达式在测试字符串 9 上返回一个结果。但是此模式不允许使用数字(因此正则表达式不应返回任何匹配项)。我删除了部分正则表达式模式以确定正则表达式的哪一部分与数字 9 匹配,并发现正则表达式的最后一部分 [\u10000-\uEFFFF] 匹配使用 9。这是模式中唯一采用 UTF-32 而不是 UTF-16 的部分,包括埃及象形文字等字符。

你知道 NSRegularExpression 是否能够支持 UTF-32 字符吗?或者任何其他支持 UTF-32 匹配的解决方案?

最佳答案

我自己找到了答案。我需要以不同于 UTF-16 字符的格式指定 UTF-32 字符。

不是 [\u10000-\uEFFFF] 而是 [\U00010000-\U000EFFFF] 是表达所有 unicode 字符所必需的。 UTF-32 Unicode 代码点以转义的 CAPITAL \U 开头,并且需要恰好 8 个十六进制数字。

关于regex - NSRegularExpression 中的 Unicode 字符 (UTF-32) 字符串编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327043/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com