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

Regex NSRegularExpression中的Unicode字符(UTF-32)字符串编码,regex,swift,character-encoding,nsregularexpression,turtle-rdf,Regex,Swift,Character Encoding,Nsregularexpression,Turtle Rdf,我正在用Swift为海龟格式的RDF数据编写解析器。海龟语法将模式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

我正在用Swift为海龟格式的RDF数据编写解析器。海龟语法将模式
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]
(见附件)

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

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

我想使用
NSRegularExpression
解析turtle文件。因此,为了匹配
PN\u CHARS\u 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 {

    }
[A-Z[A-Z[A-Z[A-Z[A-Z[A-Z[[[U00C00-\\u00D6][12[[UK00C00-\\u00D8-\\u00F6[UU00D8-\\u00D8-\\u00D8-\\U0[[[[[[[[[[[A-Z]及<<<<<<<<<<<0.0.0.0.0.0.0000F6]及[[[[u00D8-\\u00D8-\\UU00F6][[[UU0000000-\\u00F6][[[[[[[u00D8-\\u00D8-\\u00F6][[[u00D8-\\u00D8-\\u00F6-\\UU00F6][[u00F6][[[[U000000000000F6][\\u10000-\\uEFFFF]“ 做{ 让teststr=“9” 让regex=try NSRegularExpression(模式:PN_CHARS_BASE,选项:[]) 让matches=regex.matchesInString(teststr,选项:[],范围:NSMakeRange(0,teststr.characters.count))作为数组 }抓住{ } 当我通过调试器运行此命令时,正则表达式在测试字符串
9
上返回一个结果。但是此模式不允许使用数字(因此正则表达式不应返回匹配项)。我删除了正则表达式模式的部分,以确定正则表达式的哪个部分与数字
9
匹配,并发现正则表达式的最后一部分与
9
匹配。这是UTF-32而非UTF-16中唯一的图案部分,包括埃及象形文字等字符

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

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


不是
[\u10000-\uEFFFF]
而是需要
[\U00010000-\u000efff]
来表示整个unicode字符范围。UTF-32 Unicode代码点以转义大写字母
\U
开头,正好需要8个十六进制数字。

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

不是
[\u10000-\uEFFFF]
而是需要
[\U00010000-\u000efff]
来表示整个unicode字符范围。UTF-32 Unicode代码点以转义大写字母
\U
开头,需要正好8个十六进制数字