我指的是 XML 1.1 规范。
看看 的定义NameStartChar
:
NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
如果我正确解释,最后一个范围 ( #x10000-#xEFFFF
) 超出了Java类型的UTF16 范围。char
所以它必须是UTF32,对吧?所以,我需要char
根据这个范围检查对,而不是单个char
s,对吧?
我的问题是:
- 如何使用标准 Java 方法检查此类字符范围?
- 如何在 JavaCC 中定义这样的范围?
- JavaCC 抱怨
\u10000
和\uEFFFF
- JavaCC 抱怨
谢谢!
注意: 别担心,我不是在尝试编写自己的 XML 解析器。
编辑: 我正在编写一个解析器,它将检查来自其他(非 XML)文本格式的文本输入是否与有效的 XML 名称匹配。